python - Python - 来自 csv 文件的 SQLITE db 更新条目
问题描述
我正在尝试使用 csv 文件中的行更新现有的 sqlite db 行。不是删除和插入,而是更新现有行(保留 id)。
dqlite db 有 4 列,只有第 4 列不同(要更新)。如果不能只更新一列,我可以接受更新整行但保留其在 db 中的位置。
更新前的数据库:
cfthostname,cftshortname,cftenv,cert_time
1904h.net,1904h,tst,DD/MM/RRRR
19053.net,19053,tst,26/03/2021
2210010315.net,2210010315,prd,DD/MM/RRRR
1809m.net,1809m,tst,26/03/2021
13jw.net,13jw,acc,DD/MM/RRRR
csv 更新:
cfthostname,cftshortname,cftenv,cert_time
1904h.net,1904h,tst,13/05/2023
19053.net,19053,tst,23/07/2023
13jw.net,13jw,acc,14/06/2029
更新代码:
import sqlite3
import csv
conn = sqlite3.connect("C:\db.sqlite3")
cursor = conn.cursor()
[...]
with open('C:\\csv\\update.csv','rt') as fin:
dr = csv.DictReader(fin)
to_db = [(i['hostname'], i['shortname'], i['env'], i['cert_time']) for i in dr]
cursor.executemany("UPDATE itpassed_host SET hostname = ?, shortname = ?, env = ?, cert_time = ?", to_db)
conn.commit()
conn.close()
也尝试在to_db上使用()但它在 db 上给出相同的输出
cursor.executemany("UPDATE itpassed_host SET hostname = ?, shortname = ?, env = ?, cert_time = ?", (to_db))
更新后的数据库:
cfthostname,cftshortname,cftenv,cert_time
13jw.net,13jw,acc,14/06/2029
13jw.net,13jw,acc,14/06/2029
13jw.net,13jw,acc,14/06/2029
13jw.net,13jw,acc,14/06/2029
13jw.net,13jw,acc,14/06/2029
如何仅更新csv 中的行以在 db 中正确更新?
解决方案
使用WHERE
条件。
import sqlite3
import csv
conn = sqlite3.connect("db.sqlite3")
cursor = conn.cursor()
with open('update.csv','rt') as fin:
dr = csv.DictReader(fin)
to_db = [(i['cert_time'], i['cfthostname'], i['cftshortname'], i['cftenv'],) for i in dr]
cursor.executemany("UPDATE itpassed_host SET cert_time = ? WHERE cfthostname = ? AND cftshortname = ? AND cftenv = ?", to_db)
conn.commit()
conn.close()
请注意顺序更改为to_db=
。
推荐阅读
- python - 本地机器和AWS之间的多处理?
- microsoft-graph-api - Microsoft 教育 - 学校数据同步 (SDS) 到 Microsoft Graph 映射
- stripe-payments - 将应用程序投入生产后,是否需要托管 Stripe\Braintree 支付网关的后端服务器?
- php - 使用 php 和 ajax 发布 json 数组 - 问题
- java - 单例的这两种实现有什么区别?
- javascript - 如何让 Vuex 与使用数组的复选框配合得很好?
- html - 如何添加边框
- c# - 序列化 JSON 对象时的“/”结果
- javascript - 在 Draft-JS 中,如何将 html iframe 插入到我的 contentState 中?
- docker - Docker 运行卷参数 指定 --help 以获得可用选项和命令的列表