From 39a3a0084c67c41e815d569290dc724b2143d872 Mon Sep 17 00:00:00 2001 From: Quality App Developer Date: Fri, 30 Jan 2026 15:20:49 +0200 Subject: [PATCH] Fix PyMySQL DictCursor usage in warehouse functions Fixed incorrect pymysql.cursors.DictCursor instantiation in 4 functions: - get_cp_inventory_list() - search_cp_code() - search_by_box_number() - get_cp_details() PyMySQL connection pool doesn't support cursor_factory parameter. Now manually converting tuples to dicts using cursor.description instead. --- app/modules/warehouse/warehouse.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/app/modules/warehouse/warehouse.py b/app/modules/warehouse/warehouse.py index a078c42..8d59f87 100644 --- a/app/modules/warehouse/warehouse.py +++ b/app/modules/warehouse/warehouse.py @@ -449,7 +449,7 @@ def get_cp_inventory_list(limit=100, offset=0): """ try: conn = get_db() - cursor = conn.cursor(pymysql.cursors.DictCursor) + cursor = conn.cursor() # Get all CP codes with their box and location info (latest entries first) cursor.execute(""" @@ -474,7 +474,9 @@ def get_cp_inventory_list(limit=100, offset=0): LIMIT %s OFFSET %s """, (limit, offset)) - results = cursor.fetchall() + # Convert tuples to dicts using cursor description + columns = [col[0] for col in cursor.description] + results = [{columns[i]: row[i] for i in range(len(columns))} for row in cursor.fetchall()] cursor.close() return results if results else [] @@ -495,7 +497,7 @@ def search_cp_code(cp_code_search): """ try: conn = get_db() - cursor = conn.cursor(pymysql.cursors.DictCursor) + cursor = conn.cursor() # Remove hyphen and get base CP code if full CP provided search_term = cp_code_search.replace('-', '').strip().upper() @@ -523,7 +525,9 @@ def search_cp_code(cp_code_search): ORDER BY MAX(s.created_at) DESC """, (f"{search_term}%",)) - results = cursor.fetchall() + # Convert tuples to dicts using cursor description + columns = [col[0] for col in cursor.description] + results = [{columns[i]: row[i] for i in range(len(columns))} for row in cursor.fetchall()] cursor.close() return results if results else [] @@ -544,7 +548,7 @@ def search_by_box_number(box_number_search): """ try: conn = get_db() - cursor = conn.cursor(pymysql.cursors.DictCursor) + cursor = conn.cursor() box_search = box_number_search.strip().upper() @@ -571,7 +575,9 @@ def search_by_box_number(box_number_search): LIMIT 500 """, (f"%{box_search}%",)) - results = cursor.fetchall() + # Convert tuples to dicts using cursor description + columns = [col[0] for col in cursor.description] + results = [{columns[i]: row[i] for i in range(len(columns))} for row in cursor.fetchall()] cursor.close() return results if results else [] @@ -593,7 +599,7 @@ def get_cp_details(cp_code): """ try: conn = get_db() - cursor = conn.cursor(pymysql.cursors.DictCursor) + cursor = conn.cursor() # Search for all entries with this CP base cursor.execute(""" @@ -622,7 +628,9 @@ def get_cp_details(cp_code): LIMIT 1000 """, (cp_code.upper(),)) - results = cursor.fetchall() + # Convert tuples to dicts using cursor description + columns = [col[0] for col in cursor.description] + results = [{columns[i]: row[i] for i in range(len(columns))} for row in cursor.fetchall()] cursor.close() return results if results else []