【问题标题】:Python - SQLITE db update entrys from csv filePython - 来自 csv 文件的 SQLITE db 更新条目
【发布时间】: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


    【解决方案1】:

    使用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= 行中更改的顺序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-16
      • 2012-01-07
      • 2016-10-20
      • 1970-01-01
      • 2020-06-01
      • 1970-01-01
      相关资源
      最近更新 更多