繁体   English   中英

带有 Python 的 SQLITE3 - 使用带通配符的多个变量进行查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM