我正在尝试为用户提供多种搜索功能,并且想知道如何组合他们的结果。
我尝试了“显而易见”的方式来实现,而这只是使用
timertext
两种方法之间的。 但这不起作用,并出现以下错误:
cursor.execute("UNION")
我希望能够做类似的事情:
Traceback (most recent call last):
File "C:\T3AJM\T3_AJM_fn.py", line 188, in <module>
welcome_menu()
File "C:\T3AJM\T3_AJM_fn.py", line 119, in welcome_menu
file_server.master_search(answer[0])
File "C:\T3AJM\T3_AJM_fn.py", line 51, in master_search
cursor.execute("UNION")
sqlite3.OperationalError: near "UNION": syntax error
并将这两个结果结合起来。
方法类似于
search_file_name(search)
cursor.execute("UNION")
search_by_extension(search)
和
def search_file_name(self, searched_file_name):
"""
Searches
"""
cursor.execute("""SELECT * FROM files
WHERE file_name LIKE ?""", ('%' + searched_file_name + '%',))
我知道我可以通过在execute中使用multi标志从技术上做到这一点,并将两种方法中的字符串手动复制到一个中,但是我希望能够对任意数量的搜索方法执行此操作,而不必每次都这样做。
谢谢您的时间。
答案 0 :(得分:1)
cursor.execute()
不执行批处理。它需要一个完整的SQL语句并执行它。孤独的"UNION"
并不是完整的SQL语句,而是一种语法错误。
这可以。
cursor.execute("""
SELECT stuff FROM table1 WHERE something = 'this_value'
UNION
SELECT stuff FROM table2 WHERE something_else = 'that_value'
""")
但是根据您的操作,直接在Python中组合多个查询结果也是可行的
因此,对于您的情况,这是一种方式(通过UNION的单个语句):
# Avoid SELECT *. Spell out the columns you're selecting.
cursor.execute("""
SELECT path, name, extension FROM files WHERE file_name LIKE ?1
UNION
SELECT path, name, extension FROM files WHERE extension LIKE ?1
""", ('%' + extension + '%',))
这将是另一个(之后合并):
from itertools import chain
def search_file_name(self, searched_file_name):
return cursor.execute("""
SELECT path, name, extension FROM files WHERE file_name LIKE ?1
""", ('%' + searched_file_name + '%',))
def search_by_extension(self, extension):
return cursor.execute("""
SELECT path, name, extension FROM files WHERE extension LIKE ?1
""", ('%' + extension + '%',))
def search_combined(self, criteria):
return chain(
self.search_file_name(self, criteria),
self.search_by_extension(self, criteria)
)