[英]SQLITE3 with Python - Query using multiple variables with wildcards
我似乎无法确定是否有可能完成我正在尝试做的事情。
我有一个希望用户可以搜索的数据库。 在“零件”表中,我通过零件编号和描述进行搜索。 我知道 "%Like%" 允许匹配字符串,但是如果用户以错误的顺序键入描述的话怎么办?
我的解决方案是将单词切碎,单独查询 append 数据到列表并将列表比较在一起以仅保留重复项。
part_number = 111
description = "test test test"
description = description.split(" ")
for word in description:
query = ("SELECT * FROM parts WHERE part_number like ? and description like ?;")
data = cursor.execute(query, ('%' + part_number + '%', '%' + word '%')).fetchall()
list_of_lists.append(data)
我想发生的事情:
query = "SELECT * FROM parts WHERE part_number like ?"
for word in description:
query = query + " and description like ?"
cursor.execute(query, ('%' + part_number + '%', -> amount of words to fill in required wildcards generated above)).fetchall()
有没有办法将通配符与长度未知的列表一起使用? 使用任意数量的通配符(默认为“_”以不中断任何可能的匹配)构建查询会更好吗?
我想做任何安全的事情,因为用户将直接进行搜索。
对于提供的代码中的任何错误,我深表歉意,我的原始代码示例长达数百行。
使用列表推导将%
连接到description
的每个元素。
cursor.execute(query, ['%' + part_number + '%'] + ['%' + d + '%' for d in description'])
你不能用.format() 做这样的事情吗? 我猜你想要那个? 充满了循环的“单词”。
我将 pyodbc 用于我的连接,并且 .format() 功能适用于我的目的 - 在您使用的 package 中可能相同。
我还在列表创建语句中添加了
part_number = 111
description = "test test test"
list_of_lists = []
description = description.split(" ")
for word in description:
query = "SELECT * FROM parts WHERE part_number like {} and description like {};".format(word, word)
data = cursor.execute(query).fetchall()
list_of_lists.append(data)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.