Как я могу позволить заполнителям быть пустыми в SQLite3 в Python? - PullRequest
0 голосов
/ 30 апреля 2020

Я пишу базу данных «Заказ на продажу» прямо сейчас, и я должен реализовать функцию поиска, которая позволяет пользователю вводить такие данные, как, имя клиента, фамилия, идентификатор заказа, идентификатор клиента и т. Д. c , Проблема, с которой я столкнулся, заключается в том, что клиенту не нужно ничего вводить для полей, а вместо этого просто нажмите клавишу ввода, чтобы оставить это поле пустым, чтобы пропустить. Но 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)

1 Ответ

1 голос
/ 30 апреля 2020

Проверьте наличие пустого значения в вашем 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]+'%',))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...