2016-04-07 10 views
2

が動作していない、私は新しいものに古いデータベースのデータを挿入し、次のコードを持っている:Psycopg2:cursor.executeだからきちんと

...  
cur_old.execute("""SELECT DISTINCT module FROM all_students_users_log_course266""") 
module_rows = cur_old.fetchall() 

for row in module_rows: 
    cur_new.execute("""INSERT INTO modules(label) SELECT %s WHERE NOT EXISTS (SELECT 1 FROM modules WHERE label=%s)""", (row[0], row[0])) 
... 

最後の行は、ラベルが挿入されているクエリを実行し新しいデータベーステーブル私はpgAdminでこのクエリをテストし、私が望むように動作します。

ただし、スクリプトを実行すると、modulesテーブルには何も挿入されません。 (実際にはシーケンスは更新されますが、テーブルにはデータは保存されません)。

カーソルからexecuteメソッドを呼び出した後、何か他の操作を行う必要がありますか?

(詩。スクリプトがエラーなしで最後まで実行されている)

答えて

3

あなたはconnection.commit()を行うことを忘れてしまいました。データベースの変更には、接続のコミットが必要です。例えば、sqlite3 documentationは、最初の例で明確に述べている:

# Save (commit) the changes. 
conn.commit() 

そしてpsycopg2 documentationの最初の例では、同じ処理を行います)

# Make the changes to the database persistent 
>>> conn.commit() 
+0

はい! forの後に 'conn_new.commit()'をして、テーブルを更新しました。ありがとうございました、@Evert –

関連する問題