使用字典将Python更新或插入到sqlite

2024-03-29 13:53:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图更新或插入,如果不存在到sqlite表行。 无法使用executemany

我的输入csv如下所示:

cfthostname,cftshortname,cftenv,cert_time
lx1234.pl.net,lx1234,tst,28/01/2021
plx169.net,plx169,tst,26/03/2021
sp2444445.net,sp2444445,prd,12/06/2021

我的数据库模型

cfthostname,cftshortname,cftenv,cert_time
lx1234.pl.net,lx1234,tst,DD/MM/RRRR
plx169.net,plx169,tst,DD/MM/RRRR
sp2444445.net,sp2444445,prd,DD/MM/RRRR

我需要做的是:
1如果输入csv中的cfthostname与db中的cfthostname匹配,则更新cert\u time
2如果数据库中不存在cfthostname,请插入所有4列

分贝_更新.py

import sqlite3
import csv

conn = sqlite3.connect("C:\db.sqlite3")
cursor = conn.cursor()
[...]
######---Import to DB---######
cursor.execute("CREATE TABLE IF NOT EXISTS itpassed_host (cfthostname, cftshortname, cftenv, cert_time);")
with open('C:\csv\cfthosts.csv','rt') as fin:
    dr = csv.DictReader(fin)
    to_db = [(i['cfthostname'], i['cftshortname'], i['cftenv'], i['cert_time']) for i in dr]

cursor.executemany("INSERT INTO itpassed_host (cfthostname, cftshortname, cftenv, cert_time) VALUES (?, ?, ?, ?) ON CONFLICT (cfthostname) DO UPDATE SET cert_time=excluded.cert_time;", to_db)
conn.commit()
conn.close()

我明白了

sqlite3.OperationalError: near "ON": syntax error

我有sqlite 3.7.17


Tags: csvdbcertnettimeconnsqlite3cursor