来自字符串列的sqlite3日期比较

sqlite3 Date Comparison from a string column

我正在使用 sqlite3 存储来自 pandas 数据帧的数据

我从 Twitter 抓取数据,我希望它是每小时一次

为此,我想过滤数据库中的日期 日期格式是这样的:

 2021-11-11 08:07:33+00:00

我正在使用的查询:

cur.execute("SELECT * FROM tweets_b_db  WHERE tweet_created_at > "+li+" ")

li 是再次填充数据库之前最后插入日期的变量

cur.execute("SELECT tweet_created_at FROM tweets_b_db ORDER BY tweet_created_at DESC LIMIT 1")
    li = cur.fetchone()

什么 returns :

can only concatenate str (not "tuple") to str

我的代码:

import tweepy
import time
import datetime
import pandas as pd
import sqlite3

con = sqlite3.connect('tweetScaping.db')
cur = con.cursor()
consumer_key = "**********************"
consumer_secret = "****"
access_token = "****-*****"
access_token_secret = "***************"
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth, wait_on_rate_limit=True)

# using tweepy to search for the keyword Bouygues telecom
text_query = 'bouygues telecom OR @bouyguestelecom OR #Bouygues'
count = 200




try:
    # Creation of query method using parameters
    tweets = tweepy.Cursor(api.search_tweets, q=text_query + " -filter:retweets").items(count)

    # Pulling information from tweets iterable object
    tweets_list = [[tweet.created_at, tweet.id, tweet.text] for tweet in tweets]

    # Creation of dataframe from tweets list
    # Add or remove columns as you remove tweet information
    # tweets_df = pd.DataFrame(columns=['tweet_created_at', 'tweet_id', 'tweet_text'])
    tweets_df = pd.DataFrame(tweets_list)
    tweets_df.columns = ['tweet_created_at', 'tweet_id', 'tweet_text']


    #last inserted
    cur.execute("SELECT tweet_created_at FROM tweets_b_db ORDER BY tweet_created_at DESC LIMIT 1")
    li = cur.fetchone()


    # to insert results to database (sqlite3)
    tweets_df.to_sql(name='tweets_b_db', con=con, if_exists='replace')


    # to show table content
    cur.execute("SELECT * FROM tweets_b_db  WHERE tweet_created_at > "+li+" ")
    print(cur.fetchall())

    

except BaseException as e:
    print('failed on_status,', str(e))
    time.sleep(3) 

更新: 使用 :

cur.execute("SELECT tweet_created_at FROM tweets_b_db ORDER BY tweet_created_at DESC LIMIT 1")
data = cur.fetchone()
data = data[0]
cur.execute("SELECT * FROM tweets_b_db  WHERE tweet_created_at >= Datetime('{data}')")
print(cur.fetchall())

returns 没有:

[]

如果有人能指导我正确的方向,那将非常有帮助

fetchone() returns 一个包含查询中所有请求列的元组。在你的例子中,只有一个列(tweet_created_at),所以一个元素(tweet_created_at 的值)将出现在你的元组中,可以在索引 0.

处访问
li = cur.fetchone()
li = li[0]

如果您对 sql 语句使用 f 字符串:

cur.execute(f"SELECT * FROM tweets_b_db  WHERE tweet_created_at >= Datetime('{data}')")

我相信您的代码会起作用。

但是,推荐的参数传递方式是使用 ? 占位符:

cur.execute("SELECT * FROM tweets_b_db  WHERE tweet_created_at >= Datetime(?)", (data,))

此外,如果 data 具有正确的日期时间格式 yyyy-mm-dd hh:MM:ss 那么您不需要函数 DATETIME():

cur.execute("SELECT * FROM tweets_b_db  WHERE tweet_created_at >= ?", (data,))