Python - SQL 有效更新表中所有行的方法

0 投票
1 回答
664 浏览
提问于 2025-04-29 11:28

我正在尝试用Python更新一个包含很多行的SQL表。假设这个表有三列,分别是(id BIGINT, key text, content text)。我需要根据一个叫做myfun的函数来更新所有行的“content”字段,这个函数是基于“key”来工作的。myfun会调用一些网络接口,可能会花费一些时间。
所以我做了以下操作:

conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='xxx')
cur = conn.cursor()
conn.select_db("%s" % dbname)
cur.execute("select key from table")
results = cur.fetchall()
for result in results:
  txt = myfun(result[0])
  cur.execute("update posts set content = %s where key = %s", (txt, result[0]))
conn.commit()
cur.close()
conn.close()

当表格比较小的时候,这个方法对我有效。但我不确定如果表格有很多行时,这个方法是否还有效。或者在这种情况下,有没有更有效的更新行的方法?

谢谢

暂无标签

1 个回答

0

如果你在使用innodb,你可以把所有操作放在一个事务里来提交,同时把外键检查、唯一性检查等设置为false。不过,你有没有检查过瓶颈是mysql的更新命令,还是myfun这个函数?如果是myfun,那你应该把精力放在优化这个函数上。

你在myfun里是不是在进行同步调用,并且在等待响应?那不如试试异步调用,比如用unirest这样的工具。

撰写回答