>

지금 "판매 주문"데이터베이스를 작성 중이며 사용자가 고객 이름, 성, 주문 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)


  • 답변 # 1

    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]+'%',))
    
    

  • 이전 반응 네이티브에서 3 * 3 이미지 그리드의 4 테이블 셀을 병합하려고합니다
  • 다음 git를 작성하는 방법 git/info/exclude 파일을 사용하여 무시