繁体   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