【问题标题】:Deleting the rows from sqlite db still the values are not getting deleted and size is getting bigger从 sqlite db 中删除行仍然没有被删除并且大小越来越大
【发布时间】:2021-01-18 23:56:31
【问题描述】:

我正在收集推特流并将其存储在一个 sqlite 数据库中。由于流即将到来并且数据库变得越来越大,我执行了一个命令来删除一分钟以上的推文。但推文只存在于数据库中越来越大。请帮忙,因为我是 sqlite 的新手

这是代码

class listener(StreamListener):

def on_data(self,data):
    try:
        data = json.loads(data)
        tweet = unidecode(data['text'])
        text = preprocess(tweet)
        score = predict(text)['score']
        
        created_at = data['created_at']
        

        
        

        c.execute('INSERT INTO sentiment (created_at,tweet,score) VALUES (?,?,?)',(created_at,tweet,score))
        conn.commit()

      
        
        c.execute('DELETE FROM sentiment WHERE created_at IN(SELECT created_at FROM(SELECT 
                  created_at, strftime("%s","now") - strftime("%s",created_at) AS passed_time FROM 
                sentiment WHERE passed_time >=60))')
       
        conn.commit()

    except Exception as e:
        print(str(e))

【问题讨论】:

    标签: python-3.x sqlite tweepy sentiment-analysis


    【解决方案1】:

    您正在测试 IN 子查询,该子查询又具有子查询, 而你抱怨这种复杂的方法不起作用, 该 IN 未找到匹配项 在您的“自 1970 年以来的秒数”时间戳中。

    好的。你的规范比那简单得多,你说你想要

    删除超过一分钟的推文的命令

    小菜一碟。只要按照那个英文句子,把它变成SQL:

    DELETE FROM sentiment WHERE created_at < strftime('%s', 'now') - 60;
    

    当前时间减去六十秒是一分钟前, 并且 WHERE 子句要求比这更早的行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-09
      • 1970-01-01
      • 1970-01-01
      • 2014-05-02
      • 2017-02-08
      • 1970-01-01
      • 2016-07-18
      • 2022-11-02
      相关资源
      最近更新 更多