簡體   English   中英

如何在 Python 的 SQLite3 中允許占位符為空?

[英]How do I allow placeholders to be empty in SQLite3 in Python?

我現在正在編寫一個“銷售訂單”數據庫,我應該實現一個搜索 function 允許用戶輸入數據,如客戶名字、姓氏、訂單 ID、客戶 ID 等。我遇到的問題是客戶不必為這些字段輸入任何內容,而只需按 Enter 將其留空即可跳過。 但是 SQL 似乎將其視為空輸入並尋找空字段。 我怎樣才能使程序改為允許占位符接受任何內容,而不是尋找空白。 謝謝!

initialSearchInformation = [input("Enter Customer Last Name (To skip, press ENTER)"),
                            input("Enter Customer Email (To skip, press ENTER)"),
                            input("Enter Customer Number (To skip, press ENTER)"),
                            input("Enter Order Number (To skip, press ENTER)"),
                            input("Enter Order Amount Greater Than (To skip, press ENTER)"),
                            input("Enter Order Amount Less Than (To skip, press ENTER)")]

    conn = create_connection()
    cur = conn.cursor()
    cur.execute("""SELECT * 
                   FROM SalesOrder 
                       INNER JOIN Customer 
                       ON Customer.CustomerID = SalesOrder.CustomerID 
                   WHERE SalesOrderID=? 
                       AND SalesOrder.CustomerID=? 
                       AND Amount > ? 
                       AND Amount < ? 
                       AND Customer.CustomerName LIKE ?""", (initialSearchInformation[3], initialSearchInformation[2], initialSearchInformation[4], initialSearchInformation[5], '%'+initialSearchInformation[0]+'%',))
    rows = cur.fetchall()
    print("\nInfo Found: ")
    for row in rows:
        print(row)

檢查 SQL 中的空值。 例如替換

SalesOrderId = ?

(? = '' OR SalesOrderID = ?)

由於現在有兩個占位符,您需要在參數元組中復制相應的元素:

initialSearchInformation[3], initialSearchInformation[3]

完整的查詢變為

cur.execute("""SELECT * 
    FROM SalesOrder 
    INNER JOIN Customer ON Customer.CustomerID = SalesOrder.CustomerID 
    WHERE (? = '' OR SalesOrderID=?) 
        AND (? = '' OR SalesOrder.CustomerID=?) 
        AND (? = '' OR Amount > ?) 
        AND (? = '' OR Amount < ?) 
        AND (? = '' OR Customer.CustomerName LIKE ?)""", 
    (initialSearchInformation[3], initialSearchInformation[3], 
     initialSearchInformation[2], initialSearchInformation[2], 
     initialSearchInformation[4], initialSearchInformation[4], 
     initialSearchInformation[5], initialSearchInformation[5], 
     initialSearchInformation[0], '%'+initialSearchInformation[0]+'%',))

暫無
暫無

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

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