亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python-MySQL 查詢不顯示結果,包括同一查詢中先前的導入

Python-MySQL 查詢不顯示結果,包括同一查詢中先前的導入

一只斗牛犬 2023-07-11 14:37:23
我有一個功能,在掃描條形碼后將新記錄添加到 Mysql 數據庫中。功能正常,但在應用程序屏幕上返回結果時出現問題。當我第一次掃描條形碼時,即使我可以看到新記錄已創建,它也不會返回任何結果。但當我第二次掃描條形碼時,它只返回 1 條記錄。編輯:(添加了有關該問題的更多信息)之后它始終是-1記錄,這不會是問題我可以向所有結果添加+1,但問題是第一個,因為它根本不返回任何內容。我嘗試在查詢之間使用 time.sleep(.3) 但這沒有任何效果。我現在想知道 Python 代碼是否錯誤,或者我的 SQL 查詢是否應該有所不同。def db_execute3(config, sql, val):    mydb = mysql.connector.connect(**config)    mycursor = mydb.cursor()    try:        mycursor.execute(sql, val)        mydb.commit()    except mysql.connector.Error as err:        if err.errno == errorcode.CR_CONN_HOST_ERROR:            popip.open()            Clock.schedule_once(popip.dismiss, 3)        elif err.errno == errorcode.ER_ACCESS_DENIED_ERROR:            popx.open()            Clock.schedule_once(popx.dismiss, 3)        elif err.errno == errorcode.ER_BAD_DB_ERROR:            popdb.open()            Clock.schedule_once(popdb.dismiss, 3)        elif err.errno == errorcode.ER_NO_REFERENCED_ROW_2:            popbr.open()            Clock.schedule_once(popbr.dismiss, 3)        else:            mycursor.close()def inbsort_btndwn(self, _):   cont = self.container_no.text.upper()   barc = self.sku_barcode.text.upper()   sort_worknumb = self.sort_worknumb.text.upper()   val = (sort_worknumb, cont, barc)   valx = (cont,barc)   if barc is "" and cont is "":       errorsound.play()       self.pallet_sku.text = ""       self.number_sku.text = ""       Clock.schedule_once(self.focus_container_no, 0.2)   elif barc is "" and cont is not "":       errorsound.play()       self.pallet_sku.text = ""       self.number_sku.text = ""       Clock.schedule_once(self.focus_sku_barcode, 0.2)
查看完整描述

1 回答

?
largeQ

TA貢獻2039條經驗 獲得超8個贊

如前所述,我建議重構您的代碼,以免將 UI 代碼與數據庫訪問混合在一起。這樣您就可以更輕松地測試程序的每個部分(手動,從單獨的模塊)或使用單元測試等自動測試。


您還可以自由創建新游標,不要重復使用單個游標。


這是一個這樣的重構......


def find_container(db, *, container_no, barcode):

    cursor = db.cursor()

    cursor.execute(

        "select * from inb_container where `container_no` = %s and `sku_code` = %s",

        (container_no, barcode),

    )

    return cursor.fetchone()



def insert_sor_con(db, *, sort_worknumb, container_no, barcode):

    cursor = db.cursor()

    cursor.execute(

        "INSERT INTO inb_sor_con (`work_number`, `container_no`,`sku_barcode`) VALUES (%s, %s, %s)",

        (sort_worknumb, container_no, barcode),

    )

    db.commit()



def get_scan_results(db, *, container_no, barcode):

    cursor = db.cursor()

    cursor.execute(

        """

    SELECT ic.sort_box,ic.sort_pallet

    FROM inb_container ic, inb_sor_con ib

    WHERE (

        ic.container_no = ib.container_no AND

        ic.sku_code = ib.sku_barcode AND

        ic.container_no = %s AND

        ic.sku_code = %s

    )""",

        (container_no, barcode),

    )

    return cursor.fetchall()



def show_error(message):

    errorsound.play()

    popuni.content.text = message

    popuni.open()

    Clock.schedule_once(popuni.dismiss, 2)



class SomeUI:

    def inbsort_btndwn(self, _):

        container_no = self.container_no.text.upper()

        barcode = self.sku_barcode.text.upper()

        sort_worknumb = self.sort_worknumb.text.upper()

        if not (barcode and container_no):

            errorsound.play()

            self.pallet_sku.text = ""

            self.number_sku.text = ""

            if not barcode:

                Clock.schedule_once(self.focus_sku_barcode, 0.2)

            else:

                Clock.schedule_once(self.focus_container_no, 0.2)

            return


        try:

            with mysql.connector.connect(**config) as mydb:

                container_record = find_container(

                    mydb, container_no=container_no, barcode=barcode

                )

                if container_record:

                    correctsound.play()

                    insert_sor_con(

                        mydb,

                        sort_worknumb=sort_worknumb,

                        container_no=container_no,

                        barcode=barcode,

                    )

                    scan_results = list(

                        get_scan_results(mydb, container_no=container_no, barcode=barcode)

                    )

                    for sort_box, sort_pallet in scan_results:

                        self.pallet_sku.text = "{}".format(sort_pallet)

                        self.number_sku.text = "Scanned: {} of: {}".format(

                            len(scan_results), sort_box

                        )

                else:

                    show_error("No records for scanned Barcode!")

        except Exception as exc:

            # may want to use `traceback.print_traceback()` here for more detail

            print(exc)

            show_error(f"Error: {exc}")

        Clock.schedule_once(self.clear_barcode, 0.2)

        Clock.schedule_once(self.focus_sku_barcode, 0.21)



查看完整回答
反對 回復 2023-07-11
  • 1 回答
  • 0 關注
  • 216 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號