如何在sqlite3中使用python函数逐行更新?

时间:2020-03-23 21:18:12

标签: python database sqlite

我认为这个问题重复了,但我听不懂其他答案...

  1. 原始表如下。
NAME    AGE SMOKE
John    25  None
Alice   23  None
Ken     26  None
  1. 我将更新这些行中的SMOKE列,

  2. 但是我需要使用在python check_smoke()中编码的函数的输出。如果我向check_smoke()输入名称,则它将返回{{1} }或"Smoke"

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

"Not Smoke"

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

1 个答案:

答案 0 :(得分:0)

您可以使用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()