【发布时间】:2019-07-30 12:02:33
【问题描述】:
我正在尝试使用我的 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 中正确更新?
【问题讨论】:
标签: python sqlite csv sql-update