簡體   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