如何在SQL中使用转义字符来查询LIKE? (蟒蛇)

时间:2019-03-01 11:37:40

标签: python sqlite escaping

在我的LIKE中尝试使用Query失败。

使用?=可以正常工作:

def read_part_of_database(table_column, user_query):
    c_lime.execute("SELECT * FROM lime_database_table" 
            "WHERE {} = ? ORDER BY time_start".format(table_column), [(user_query)])
    for row in c_lime.fetchall():
        print(row)

但是,与此相关的是,用户需要输入query中显示的准确和完整的database。因此,我想使用LIKE。我已经尝试了以下方法,但是似乎都不起作用:

c_lime.execute("SELECT * FROM lime_database_table WHERE {} LIKE %s" 
        "ORDER BY time_start".format(table_column), ["%" + user_query + "%"])

这给了我错误:     c_lime.execute("SELECT * FROM lime_database_table WHERE {} LIKE %s ORDER BY time_start".format(table_column), ["%" + user_query + "%"]) sqlite3.OperationalError: near "%": syntax error

我尝试了一些其他的变体,取自SO和其他来源,但似乎没有一个奏效。我在使用转义%s时有问题吗?

user_query在使用= ?时是日期:2/14/2015 1:00:00 PM,在使用LIKE时是日期的一部分:2/14/2015

1 个答案:

答案 0 :(得分:1)

要在带有LIKE的查询中使用%字符,请将其用单引号引起来:

 c_lime.execute("""SELECT * FROM lime_database_table WHERE {} LIKE '%{}' 
                   ORDER BY time_start""".format(table_column, user_query))