2016-12-01 5 views
0

うわー、それはsqliteのカラムを削除するだけでは難しく、私は過去2日間20個を試しています。sqlite3 Python delete column

現時点で私にはエラーが出ていないコードがありますが、それでも結果は得られません。思考のよくある質問方法 - http://www.sqlite.org/faq.html#q11しかし、私のコードがエラーなしで実行どこで立ち往生していますが、私はDBブラウザでデータベースを開いたときに、新しいテーブルが唯一の私がコピーされた1の見出しがあります。

私はSQLの働いていますデータは含まれません。ここで

コードです:

backup = "backup" 
    c.execute("CREATE TABLE IF NOT EXISTS {bu} (id INTEGER PRIMARY KEY AUTOINCREMENT, headline TEXT, datestamp TEXT, link TEXT)".format(bu=backup)) 
    c.execute("INSERT INTO {dt} SELECT {id}, {hl}, {ds}, {lk} FROM {on}".format(dt=backup, id="id", hl="headline", ds="datestamp", lk="link", on=old_table)) 

私が言ったように、それが実行されますが、新しいテーブルにデータ、列の見出しのみがありません。挫折を越えて

ここにあなたのコードスニペットは、データベースに「表示」するための情報を得るために、あなたが受け取ったコメントごとに発生する可能性のある他のいくつかの可能性の問題を有しているが、任意のヘルプは

+0

SQL文で文字列書式を使用しないでください!詳細については、https://docs.python.org/2/library/sqlite3.htmlを参照してください。 @KlausD。 –

+0

表名/列名はパラメータ化できません。 –

+2

あなたがリンクしたFAQエントリは、2つ以上のステートメントを使用します。 –

答えて

0

を理解されるであろう具体的には、トランザクションを完了する必要があります。あなたは(あなたのスクリプトの終わりでもよい)、これらの変数の「スコープ」を離れるとき

backup = "backup" 
c.execute("CREATE TABLE IF NOT EXISTS {bu} (id INTEGER PRIMARY KEY AUTOINCREMENT, headline TEXT, datestamp TEXT, link TEXT)".format(bu=backup)) 
c.execute("INSERT INTO {dt} SELECT {id}, {hl}, {ds}, {lk} FROM {on}".format(dt=backup, id="id", hl="headline", ds="datestamp", lk="link", on=old_table)) 
conn.commit() 

そうでない場合は取引がダウンsqlite3ので行わ涙の一部としてロールバックされます。

+0

スティーブさん、ありがとうございました。私はリンクが示すように早くコミットを試みましたが、それは私にエラーを与えてしまいました。そして、クラウスが提供したリンクでは、私が必要としていたconn.commit()を使用していました。 (私はあなたがコードの残りの部分を見ていないことを知っているので、あなたは以前にそれを言っただろう)。しかし、ただコメントするだけでなく、実際に見るべきコードのためにありがとう。 –

+0

私は先生のために私の答えを更新していきます。フィードバックをお寄せいただきありがとうございます!いくつかのライブラリは、単にコミットを呼び出す文法的な砂糖としてのカーソルコミットを持っています。いくつかはしません。このケースを明示するのがベストです。 –

+0

いくつの列があるかわからないときにこの方法を実行できるかどうか知っていますか?今すぐ私はそれらを具体的に呼び出すことができるように、 "id"、 "headest"、 "datestamp"、 "link"カラムがあることを知っていますが、あなたが削除したいカラムだけを知っていて、どのようにそれらの名前を.format(etc)に入れますか? –