我似乎無法確定是否有可能完成我正在嘗試做的事情。
我有一個可供用戶搜索的資料庫。在“parts”表中,我通過 part_number 和 description 進行搜索。我知道 "%Like%" 允許匹配字串,但是如果用戶以錯誤的順序鍵入描述的單詞怎么辦?
我的解決方案是將單詞切碎,單獨查詢,將資料附加到串列并將串列放在一起比較以僅保留重復項。
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()
有什么方法可以在長度未知的串列中使用通配符?使用任意數量的默認為“_”的通配符來構建查詢以不中斷任何可能的匹配會更好嗎?
我想做任何安全的事情,因為用戶將直接進行搜索。
對于提供的代碼中的任何錯誤,我很抱歉,我的原始代碼示例長達數百行。
uj5u.com熱心網友回復:
使用串列推導式連接%到 的每個元素description。
cursor.execute(query, ['%' part_number '%'] ['%' d '%' for d in description'])
uj5u.com熱心網友回復:
你不能用 .format() 做這樣的事情嗎?我猜你想要?充滿了回圈的“詞”。
我將 pyodbc 用于我的連接,而 .format() 函式非常適合我的目的 - 也許在您使用的包中相同。
我還添加了一個串列創建陳述句
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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/385863.html
上一篇:跨多行sqlite選擇匹配項
