简体   繁体   English

Python-通过CSV数据删除SQLITE3行

[英]Python - delete SQLITE3 rows by data from CSV

Python. 蟒蛇。 I need to append and remove rows from sqlite3 database basing on data from two csv files. 我需要基于来自两个csv文件的数据来添加和删除sqlite3数据库中的行。 As for appending its all fine, i have problem with deleting. 至于附加所有的罚款,我有删除的问题。

I have csv file for deletion which looks like this: 我有要删除的csv文件,如下所示:

hostname,shortname,env
lx1234.pl.net,lx1234,tst
sp2444445.net,sp2444445,prd

python looks like this: 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) gives output: print(del_db)给出输出:

['lx1234', 'sp2444445']

so its dictionary 所以它的字典

it gives me error: 它给我错误:

sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 2 supplied.

how to delete those rows basing on dictionary created by for loop? 如何删除基于for循环创建的字典的行?

You are passing a tuple of a list, when you should be passing a list of tuples. 当您应该传递元组列表时,您正在传递列表的元组。

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()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM