我试图检索日期大于给定值的日期的所有实体。
我正在使用sqlite数据库,因此日期(record_date
)表示为TEXT
。
我的数据库是通过以下方式构建的:
conn = sqlite3.connect('my_database.db')
c = conn.cursor()
c.execute("""
INSERT INTO MY_TABLE (rating, record_date, url)
VALUES
(3, "2016-01-11", "www.site1.com"),
(3, "2016-01-04", "www.site2.com"),
(10, "2017-11-21", "www.site3.com"),
(0, "2017-04-30", "www.site4.com"),
(3, "2017-03-17", "www.site5.com"),
(1, "2016-03-29", "www.site6.com"),
(4.5, "2016-02-01", "www.site7.com"),
(3.2, "2016-02-12", "www.site8.com"),
(9, "2019-01-01", "www.site9.com"),
(6, "2017-10-04", "www.site10.com"),
(7, "2018-08-07", "www.site11.com"),
(8, "2018-06-07", "www.site12.com"),
(3, "2016-06-13", "www.site13.com"),
(2, "2017-09-02", "www.site14.com"),
(3, "2017-05-30", "www.site15.com")
""")
conn.commit()
我用python编写的查询如下:
db = sqlite3.connect(database_name)
cursor.execute("SELECT * FROM my_table WHERE strftime(record_date,'%Y-%m-%d') > ?",
(min_date_final,))
return self.cursor.fetchall()
min_date_final
是表示为年-月-日的字符串。示例:“ 2017-02-12”
我认为strftime足以将日期TEXT转换为可以执行=,>,<操作的日期,但是我缺少了一些东西。
答案 0 :(得分:2)
您输入的日期和格式顺序错误
SELECT *
FROM my_table
WHERE strftime('%Y-%m-%d', record_date) > strftime('%Y-%m-%d', ?)
答案 1 :(得分:0)
尝试使用熊猫和sqlite。
import pandas as pd
import sqlite3
conn = sqlite3.connect('my_database.db')
query = "SELECT * FROM my_table WHERE record_date > "2017-02-12;"
df = pd.read_sql_query(query,conn)
如果您的sqlite数据库具有奇怪的日期格式,则会跳过命令where
并加载所有内容,然后稍后在python中对其进行过滤。