在执行 connection.commit() 之后,为什么其他人 cursor.execute() 不能正常工作?



我正在使用PyMysql lib向我的数据库添加一些行,我得到了一个很长的SQL列表,可能超过150000行。所以我想每 5000 次执行一次提交,代码在这里:

import pymysql
sql_list = ["sql1", "sql2", "sql3", ...]  # Very long list, more than 150000 rows
conn = pymysql.connect(
host="localhost",
port=3306,
user="user",
password="abc-123",
database="test",
charset="utf8"
)
cursor = conn.cursor()
flag = 0  # flag, for the count
for sql in sql_list:
cursor.execute(sql)
flag += 1
if flag > 5000:
conn.commit()
flag = 0

当我尝试运行此脚本时,我的数据库中有一些行,但不是完整的。
然后我将代码更改为:

import pymysql
sql_list = ["sql1", "sql2", "sql3", ...]  # Very long list, more than 150000 rows
conn = pymysql.connect(
host="localhost",
port=3306,
user="user",
password="abc-123",
database="test",
charset="utf8"
)
cursor = conn.cursor()
# flag = 0  # flag, for the count
for sql in sql_list:
cursor.execute(sql)
# flag += 1
# if flag > 5000:
#     conn.commit()
#     flag = 0
conn.commit()

它工作正常!为什么?我的考虑是多余的吗?
任何建议将不胜感激。

ChowRex,你每 5000 行提交一次。我猜在最后一次提交之后,还有其他sqls要执行,并且这些sqls没有提交。我认为您需要最终提交。

flag = 0  # flag, for the count
for sql in sql_list:
cursor.execute(sql)
flag += 1
if flag > 5000:
conn.commit()
flag = 0
conn.commit()

最新更新