心理2:光标.执行工作不正常

2024-09-11 00:43:20 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我有以下代码,将旧数据库的数据插入新数据库:

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

(注:脚本运行到最后没有任何错误)


Tags: 数据代码from脚本modules数据库executewhere
2条回答

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

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

^{} documentation中的第一个示例也是这样做的:

^{pr2}$

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

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

例如:

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

相关问题 更多 >