繁体   English   中英

如何在SQLite3中为python合并两个查询的结果?

[英]How do I UNION the results of two queries in SQLite3 for python?

我正在尝试为用户提供多种搜索功能,并且想知道如何组合他们的结果。

我尝试了“显而易见”的方法来完成此操作,而该方法只是使用

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 + '%',))

def search_by_extension(self, extension):
    cursor.execute("""SELECT * FROM files
    WHERE extension LIKE ?""", ('%' + extension + '%',))

我知道我可以通过在execute中使用multi标志从技术上做到这一点,然后将两种方法中的字符串手动复制到一个中,但是我希望能够对任意数量的搜索方法执行此操作,而不必每次都这样做时间。

感谢您的时间。

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)
    )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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