使用参数“ LIKE”

时间:2018-12-22 17:18:59

标签: python sqlite

我正在用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'%'”。

4 个答案:

答案 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}

请注意,"%"非常重要,将其放在开头意味着您要搜索以输入日期开头的任何日期。