Python。我需要根据两个csv文件中的数据从sqlite3数据库中追加和删除行。至于追加它的全部罚款,我有删除的问题。
我有csv文件删除,如下所示:
hostname,shortname,env
lx1234.pl.net,lx1234,tst
sp2444445.net,sp2444445,prd
python看起来像这样:
import sqlite3
import csv
conn = sqlite3.connect("C:\db.sqlite3")
cursor = conn.cursor()
[...]
######---APPEND to DB---######
cursor.execute("CREATE TABLE IF NOT EXISTS itpassed_host (hostname, shortname, env);")
with open('C:\csv\insert.csv','rt') as fin:
dr = csv.DictReader(fin)
to_db = [(i['hostname'], i['shortname'], i['env']) for i in dr]
cursor.executemany("INSERT INTO itpassed_host (hostname, shortname, env) VALUES (?, ?, ?);", to_db)
conn.commit()
######---DELETE from DB---######
with open('C:\csv\decom.csv','rt') as fin:
dr = csv.DictReader(fin)
del_db = [i['shortname'] for i in dr]
#print(del_db)
cursor.executemany("DELETE FROM itpassed_host WHERE shortname = ?;", (del_db,))
conn.commit()
conn.close()
print(del_db)给出输出:
['lx1234', 'sp2444445']
所以它的字典
它给了我错误:
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 2 supplied.
如何根据for循环创建的字典删除那些行?
分析解答
当你传递一个list的元组时,你传递的是一个列表的元组。
with open('C:\csv\decom.csv','rt') as fin:
dr = csv.DictReader(fin)
del_db = [i['cftshortname'] for i in dr]
#print(del_db)
del_db = [(d,) for d in del_db]
cursor.executemany("DELETE FROM itpassed_host WHERE shortname = ?;", del_db)
conn.commit()