簡體   English   中英

SQL無序通配符搜索(可變數量的術語)

[英]SQL unordered wildcard search (variable number of terms)

如果要搜索包含單詞“ hex”和“ nut”的描述,我將使用以下查詢:

cursor.execute("SELECT description FROM %s WHERE description LIKE %?% AND
    description LIKE %?%" % table_name , ["hex", "nut" ])

但是,如果用戶現在要搜索包含5個詞的描述該怎么辦?

以前在純sql中,我曾編寫過類似的代碼來生成結果:

base = """
SELECT description FROM {0}
WHERE
""".format(table_name)
command = base
# Adding "AND" for each term
for i in range(len(search_terms)):
    # Last portion of the SQL query
    if i == (len(search_terms) - 1):
        command += " description LIKE '%{0}%'".format(search_terms[i])
    else:
        command += " description LIKE '%{0}%' AND ".format(search_terms[i])
command = command.replace("\n", "")
cursor.execute(command)

但是我希望使用sqlite和sql查詢有更好的方法。 我知道我可以將所有數據加載到內存中,並使用純Python實現我想要的但我想要的SQL。 那么,有沒有一種優雅而安全的方法呢?

我是stackoverflow和SQL的新手,所以如果我問錯了問題,請告訴我。

考慮使用Python的str.join進行列表理解:

table_name = 'prices'                                    # EXAMPLE
command = """ SELECT description FROM {0} WHERE """.format(table_name)

search_terms = ['hex', 'nut', 'screw', 'bolt', 'nail']   # EXAMPLE
where = ' AND '.join(["description LIKE '%?%'" for i in search_terms])

command = command + where    
print(command)
#  SELECT description FROM prices WHERE description LIKE %?% AND description LIKE %?%
#         AND description LIKE %?% AND description LIKE %?% AND description LIKE %?% 

cursor.execute(command, search_terms)                    # PARAMETERIZED QUERY

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM