Python-MySQL 查询不显示结果,包括同一查询中先前的导入

我有一个功能,在扫描条形码后将新记录添加到 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)



一只斗牛犬
浏览 164回答 1
1回答

largeQ

如前所述,我建议重构您的代码,以免将 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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python