![](/img/trans.png)
[英]How can I create a SQLite table using the sqlite3 Python library with parameterized placeholders?
[英]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.