来自字符串列的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,))
我正在使用 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,))