当前位置: 首页 > 知识库问答 >
问题:

循环删除基于计数和*天的行

杜正奇
2023-03-14

我试图根据Count和*天删除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循环,它增加计数和*天

我试过这个:

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

我得到了一个IndexError:元组索引超出范围天=row[7]

我查了一下错误并更改了号码,看它是否能修复它,仍然是索引器。

结果表的示例数据如下所示:“从结果中选择*从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

我得到的脚本的概念是正确的吗?有什么关于index错误的建议吗?谢谢!

共有2个答案

程俊誉
2023-03-14

问题:我正在试图找到一种方法来使用for循环,它增加Count和*天

增量计数天数

    day = -7        
    for count in range(1, 4):
        print("WHERE Count = {} AND '{} day')".format(count, day))
        day = day * 2

输出:
注意:这还不能用于SQL语句!

WHERE Count = 1 AND '-7 day')
WHERE Count = 2 AND '-14 day')
WHERE Count = 3 AND '-28 day')

用Python测试:3.5.3

东郭元魁
2023-03-14

考虑参数化整个间隔日期,'-7 day''-14 day',...因为qmark占位符不应该被引用。然后,将内置字符串传递到中。执行()调用

delete_sql = '''DELETE FROM result 
                WHERE [Count] = ? 
                AND ("min(_time)" < strftime('%s', 'now', ?));
             '''

data = c1.execute("SELECT * FROM ...")

for i in data.fetchall():
    Count = i[0]
    days = '-{} day'.format(i[7])

    c1.execute(delete_sql, (Count, days))
    conn.commit()
 类似资料:
  • 问题内容: 在下面的示例代码中,是否真的需要counter = 0,还是有更好,更多的Python方法来访问循环计数器?我看到了一些与循环计数器有关的PEP,但它们要么被延迟要么被拒绝(PEP 212 和PEP 281)。 这是我的问题的简化示例。在我的实际应用程序中,这是通过图形完成的,整个菜单必须每帧重新绘制一次。但这以易于复制的简单文本方式进行了演示。 也许我还应该补充一点,我正在使用Pyt

  • 问题内容: for (String fruit : list) { if(“banane”.equals(fruit)) list.remove(fruit); System.out.println(fruit); } 这是一个带有删除指令的循环。在执行时,我在控制台输出下得到一些ConcurrentModificationException: 问题:如何使用循环删除某些元素? 问题答案: 您需要

  • 问题内容: 关于如何删除所有30天以上的行有很多问题,但是我找不到与我相同的东西,因此我可以修复它 我需要删除一些超过30天的邮件记录,带有日期的列名称命名为sendOn,并且该列中的行看起来像这样2018-01-12 12:25:00我应该如何格式化查询从表中删除包含30天以上的所有记录? 这会工作吗? 编辑:上面的查询工作,但非常非常慢以任何方式使其更快?我试过了now()但它给出了函数错误的

  • 我对C很陌生,现在就在做中学习。在课堂材料中,我有以下功能: 几分钟前,我像这样使用了普通for循环:

  • 我有一个基本的链表问题,我在下面试图解决。如果您能为我的方法、算法的正确性(甚至是编码风格)提供任何信息,我将不胜感激。该问题需要一个函数,该函数删除循环链表中所有出现的int,并返回列表中的任何节点或NULL(当列表为NULL时)。 以下是我目前掌握的一些C代码:

  • 我当前正在将一个ArrayList转换为一个字符串,以便将其发送到一个DB,这样我就可以在另一端检索它,并稍后将其转换回一个ArrayList。 我的思路是通过执行以下操作将其转换为当前的字符串 是ArrayList,看起来如下所示: 当我查看数据库时,它看起来像这样 如何删除开头的和最后的以便在数据库上看起来像? 在另一端,我可以使用以下方法获得它: (我正在使用SQLite,这是我大学项目的一