繁体   English   中英

Psycopg2:cursor.execute无法正常工作

[英]Psycopg2: cursor.execute is not working properly

所以,我有以下代码将旧数据库的数据插入到新数据库中:

...    
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方法后,是否还需要执行其他操作?

(Ps。脚本运行到最后没有任何错误)

你忘了做connection.commit() 数据库中的任何更改都必须在连接上提交。 例如, sqlite3文档在第一个示例中清楚地说明了它:

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

psycopg2文档中的第一个示例也是如此:

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

正如Evert所说,commit()丢失了。 在代码中始终指定它的另一种方法是使用自动提交功能。

http://initd.org/psycopg/docs/connection.html#connection.autocommit

例如这样:

with psycopg2.connect("...") as dbconn:
            dbconn.autocommit=True

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM