programing

Python + MariaDB skiping other 문

topblog 2023. 8. 31. 23:34
반응형

Python + MariaDB skiping other 문

소포를 표시하기 위해 스캔한 바코드를 기록하기 위해 파이썬을 사용하려고 합니다.입력으로 OpenCV를 사용하고 싶지만 소포당 스캔 횟수를 제한하고 싶지 않아서 소포가 이미 MariaDB에서 발송된 것으로 표시되었는지 테스트하려고 합니다.

입력은 (지금은 휴대용 스캐너에서) 작동하고 바코드가 정상적으로 스캔되기 전에 스캔되었는지 확인하기 위해 DB를 올려다보고 있지만, 그렇지 않은 바코드는 다른 문을 건너뛴 것 같습니다.이 코드를 오랫동안 보고 있었어요!도움을 주시면 감사하겠습니다.감사해요.

import mariadb
import sys

from datetime import datetime
now  = datetime.now()
dt_string = now.strftime("%d/%m/%Y %H:%M:%S")
print("date and time =", dt_string)

conn = mariadb.connect(
    user="root",
    password="password",
    host="localhost",
    database="pythontest")
cur = conn.cursor()

while True:
    barcode=input("--->  ")
    if barcode.startswith("%"):
        courier = ("DPD")
    elif barcode.startswith("JD"):
        courier = ("Royal Mail")
    else:
        courier = ("Unknown Courier")
        print("Unknown Courier")
    cur.execute("SELECT trackingNumber,status,shipTime,courier FROM opencvdb WHERE trackingNumber=?", (barcode,))
    for trackingNumber, status, shipTime, courier in cur:
        if trackingNumber in barcode:
            print(f"Already Shipped at {shipTime} with {courier} - Tracking Number: {barcode}")
        else:
            try:
                print("Shipping Now")
                cur.execute("INSERT INTO opencvdb (trackingNumber,status,shipTime,courier) VALUES (?, ?, ?, ?)", (barcode, "Done", dt_string,courier))
            except mariadb.Error as e:
                print(f"Error: {e}")

            conn.commit()
            print(f"Last Inserted ID: {cur.lastrowid}")

conn.close()

일치하는 레코드가 없기 때문에 이 쿼리가 결과를 반환하지 않는 경우

cur.execute("SELECT trackingNumber,status,shipTime,courier FROM opencvdb WHERE trackingNumber=?", (barcode,))

그러면 이 문장은 루프할 내용이 없습니다.

for trackingNumber, status, shipTime, courier in cur:

그리고 이 진술은 절대 실행되지 않습니다.

if trackingNumber in barcode:

업데이트: 이것이 아마도 당신이 원하는 것일 것입니다.

cur.execute("select...")
found = False
for (trackingNumber, status....) in cur.fetchall():
    found = True
    print("Already shipped...")

if not found:
    cur.execute("insert into....")
    conn.commit()

언급URL : https://stackoverflow.com/questions/72606024/python-mariadb-skipping-else-statement

반응형