python - 如何使用sqlite3中的python函数逐行更新?
问题描述
我认为这个问题是重复的,但我无法理解其他答案......
- 原始表看起来像这样。
NAME AGE SMOKE
John 25 None
Alice 23 None
Ken 26 None
我将更新
SMOKE
这些行中的列,但我需要使用在 python 中编码的函数的输出
check_smoke()
。如果我输入 namecheck_smoke()
,那么它返回"Smoke"
or"Not Smoke"
。所以最终表如下所示:
NAME AGE SMOKE
John 25 Smoke
Alice 23 Not Smoke
Ken 26 Not Smoke
我正在使用 sqlite3 和 python3。我该怎么做?谢谢你的帮助!
解决方案
您可以使用 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()
推荐阅读
- python - 通过 python selenium 在 chrome 中进行 CPU 节流
- asp.net-mvc - asp.net cshtml 的正确超链接。当前错误的控制器
- c# - 如何在不使用字符串的情况下创建/读取具有特定小数的数字?
- c# - 在 ASP.NET Core 应用程序中使用 WCF 服务几个小时后获取 SecurityNegotationException
- generics - Kotlin 中的协变函数参数
- swift - Swift Character Class 上的 Java 中是否有函数 isSpaceChar 的方程?
- python - 如何计算立体空间上的光反射角
- mysql - mysql where if 条件
- angular - Angular:动态组件
- linux - stdout-stderr 如何与 docker 容器一起使用?