我正在用Python和SQlite构建一个小程序,客户可以在其中以YYYY-MM-DD格式输入日期,并取回在该特定日期发生的所有播放。所有的剧本都存储在Play.db中,该日期将日期保存为:YYYY-MM-DD HH:MM
我不希望用户输入带有小时和分钟的确切日期。他只需要键入年月日,就可以显示该特定日期的所有播放。
我意识到我需要关键字'LIKE'并将变量传递给'%'variable'%'之间,以获得相似(不完全)的匹配。 但是我不确定如何通过使用SQLite查询的语法来做到这一点:
user_input = input("Please, type the date of the play in format: 'YYYY-MM-DD':")
search_date = """SELECT * FROM play WHERE play_date LIKE ? """
cursor.execute(search_date, [(user_input)])
results = cursor.fetchall()
问题在于,由于SQL查询正在查找完全匹配,因此未填充“结果”。
因此我尝试使用%user_input%或%?%,但是,令人困惑的是,未定义变量'%user_input%'或%?%。
我知道应该怎么做:
how to search similar strings in SQLite
但是我不确定如何使用我的代码语法获得“ LIKE'%'variable'%'”。
答案 0 :(得分:1)
import datetime
user_input = datetime.datetime(input("Please, type the date of the play in format: 'YYYY-MM-DD':"), '%Y-%m-%d')
# 2011-11-11
search_date = f'SELECT * FROM play WHERE play_date LIKE {user_input}'
print(search_date)
# SELECT * FROM play WHERE play_date LIKE 2011-11-11
这是您要找的吗?
经过修改以防止SQL注入
答案 1 :(得分:1)
在查询中使用date
函数仅比较存储的日期时间值和用户输入的日期。
SELECT * FROM play WHERE date(play_date) = date(?)
答案 2 :(得分:0)
您需要一个日期函数。您也可以对字符串使用切片。喜欢:
theDate = input() #example: 2018-12-24
Year = theDate[:3]
Month = theDate[5:6]
Day = theDate[8:9]
答案 3 :(得分:-1)
早上好, 好吧,这可能并不是您想要的,但是当我想构建类似的东西但这次使用Flask和SQLAlchemy时,我会分享一些我编写的代码。
首先是将数据转换为日期/日期时间,以确保数据有效
converted_date = datetime.datetime.strptime(user_input, "%Y-%m-%d").date()
转换为常规SQL查询应该
SELECT * FROM play WHERE play_date LIKE {"%" + converted_date}
请注意,"%"
非常重要,将其放在开头意味着您要搜索以输入日期开头的任何日期。