【发布时间】:2017-02-15 01:59:59
【问题描述】:
我想从记录 ID 与 python 列表匹配的表中删除记录。
示例数据:
dbfile = ':memory:'
conn = sqlite3.connect(dbfile)
cur = conn.cursor()
cur.executescript('''BEGIN TRANSACTION;
CREATE TABLE `strat` (
`Id` INTEGER NOT NULL,
`thing1` TEXT NOT NULL,
`thing2` NUMERIC NOT NULL,
PRIMARY KEY(`Id`)
);
INSERT INTO `strat` (Id,thing1,thing2)
VALUES (1,'0','delete'),
(2,'34','delete'),
(3,'456','delete'),
(4,'458','keep'),
(5,'998','keep'),
(6,'1000','delete'),
(7,'2001','delete');
COMMIT;''')
cur.execute('''select * from strat'''); cur.fetchall()
#Out[32]:
#[(1, '0', 'delete'),
#(2, '34', 'delete'),
#(3, '456', 'delete'),
#(4, '458', 'keep'),
#(5, '998', 'keep'),
#(6, '1000', 'delete'),
#(7, '2001', 'delete')]
我找到了我想从其他地方处理中删除的记录的 ID。这里我要删除ID为1,2,3,6,7的记录
delete_list = [1,2,3,6,7]
期望的输出:
[(4, '458', 'keep'),
(5, '998', 'keep')]
这不起作用:
cur.execute('''DELETE FROM strat WEHRE Id IN ?''', delete_list)
但是等价的在 sqlite shell 中确实有效:
DELETE FROM strat WHERE Id IN (1,2,3,6,7)
我已经使用了一个循环,它有效,但感觉就像失败了:
for id in delete_list:
cur.execute('''delete from strat where Id = ?''', (id,))
conn.commit()
cur.execute('''select * from strat'''); cur.fetchall()
#Out[50]: [(4, '458', 'keep'), (5, '998', 'keep')]
【问题讨论】:
-
大声笑@“感觉像失败”;-)