【发布时间】:2018-12-06 17:02:49
【问题描述】:
我正在尝试根据 Count 和 * of days 删除 SQLite 中的行。
而不是像这样编写多个 SQL 命令:
DELETE * FROM result WHERE Count = 1 AND ("min(_time)" < strftime('%s','now', '-7 day'));
DELETE * FROM result WHERE Count = 2 AND ("min(_time)" < strftime('%s','now', '-14 day'))
DELETE * FROM result WHERE Count = 3 AND ("min(_time)" < strftime('%s','now', '-28 day'));
等等……
我正在尝试找到一种使用 for 循环的方法,它会增加 Count 和 * 天
我试过了:
data = c1.execute('''SELECT * FROM result;''')
for row in data:
Count = row[1]
days = row[7]
c1.execute('''DELETE * FROM result WHERE Count = ? AND ("min(_time)" < strftime('%s','now', '-? day'));''', (Count, days))
我在days = row[7] 下得到一个IndexError: tuple index out of range。
我查了error,改了号码看看能不能解决,还是indexerror。
结果表的样本数据如下所示:“select * from result;”从 Splunk 导出的列:src_ip、'min(_time)'、Count
183.78.180.27|1542266993|1
185.189.150.42|1542246169|1
185.189.150.61|1542271436|1
2002:8672:d515::8672:d515|1537536602|3
150.135.165.114|1537288499|3
我对脚本的概念是否正确?关于 indexerror 的任何建议?谢谢!
【问题讨论】:
-
看起来你在 for 循环的每次迭代中都分配了相同的东西。
-
我不明白你的第二个示例代码——它执行一个 SELECT,然后在循环中执行另一个 SELECT——它从不尝试删除,这就是你所说的你想要的。
-
请修复
cursor.fetchall,因为它不接收参数。
标签: python python-3.x sqlite