首页 > 解决方案 > 如何使用sqlite3中的python函数逐行更新?

问题描述

我认为这个问题是重复的,但我无法理解其他答案......

  1. 原始表看起来像这样。
NAME    AGE SMOKE
John    25  None
Alice   23  None
Ken     26  None
  1. 我将更新SMOKE这些行中的列,

  2. 我需要使用在 python 中编码的函数的输出check_smoke()如果我输入 name check_smoke(),那么它返回"Smoke"or "Not Smoke"

  3. 所以最终表如下所示:

NAME    AGE SMOKE
John    25  Smoke
Alice   23  Not Smoke
Ken     26  Not Smoke

我正在使用 sqlite3 和 python3。我该怎么做?谢谢你的帮助!

标签: pythondatabasesqlite

解决方案


您可以使用 1 个游标选择行并使用另一个游标来更新它们。

假设表的名称是 smk(将其替换为您的实际名称)并且这con是与数据库的已建立连接,您可以执行以下操作:

curs = con.cursor()
curs2 = con.cursor()
batch = 64            # size of a batch of records
curs.execute("SELECT DISTINCT name FROM smk")
while True:
    names = curs.fetchmany(batch)                             # extract a bunch of rows
    if len(names) == 0: break
    curs2.executemany('UPDATE smk SET smoke=? WHERE name=?',  #  and update them
              [(check_smoke(name[0]), name[0]) for name in names])
con.commit()

推荐阅读