07-01-2022, 02:41 PM
Hola como estan??.
estoy tratando de simplificar las consultas a una tabla en mysql para un control de stock, a modo de prueba ,el tema es al ingresar un articulo nuevo se haga una busqueda a ver si ya existe y si es asi solo se suma la cantidad a la ya existente, todo ello hecho mediante consultas pero se me hace que muy rudimentario y demora unos segundos en cargar o actualizar cada nuevo articulo, la idea era tomar los datos nuevos y compararlos con los de la tabla pasando por un bucle y hacer el proceso de comparacion y actualizacion dentro de alguna variable para luego llevarlo a la base de datos, pero no le encontre la vuelta. Les paso el codigo, no me maten por lo cavernicoal que fui al resolverlo asi , a ver si me pueden tirar alguna idea de por donde ir... gracias saludos.
estoy tratando de simplificar las consultas a una tabla en mysql para un control de stock, a modo de prueba ,el tema es al ingresar un articulo nuevo se haga una busqueda a ver si ya existe y si es asi solo se suma la cantidad a la ya existente, todo ello hecho mediante consultas pero se me hace que muy rudimentario y demora unos segundos en cargar o actualizar cada nuevo articulo, la idea era tomar los datos nuevos y compararlos con los de la tabla pasando por un bucle y hacer el proceso de comparacion y actualizacion dentro de alguna variable para luego llevarlo a la base de datos, pero no le encontre la vuelta. Les paso el codigo, no me maten por lo cavernicoal que fui al resolverlo asi , a ver si me pueden tirar alguna idea de por donde ir... gracias saludos.
Código:
def insert(data, copia):
conn = create_connection()
#inserto los datos a la tabla
sql = """INSERT INTO nombre (articulo, cantidad, talle, color, costo, ganancia, precio) VALUES(%s, %s, %s, %s, %s, %s, %s)"""
try:
cur = conn.cursor()
cur.execute(sql, data)
conn.commit()
#creo una copia de la tabla
ct = """CREATE TABLE copia_nombre LIKE nombre"""
cur.execute(ct)
#inserto en la nueba tabla todos los articulos manteniendo el id y sumando las cantidades de los que posean el mismo articulo, color, talle
filtro= """INSERT INTO copia_nombre select id, articulo, sum(cantidad), talle, color, costo, ganancia, precio from nombre where articulo = %s and talle =%s and color = %s group by 'articulo' """
cur.execute(filtro, copia)
#borro de la tabla original los datos que coincidan en articulo, talle y color, paracopiar los datos restantes a copia_nombre
borrar= """DELETE FROM nombre WHERE articulo = %s and talle = %s and color = %s"""
cur.execute(borrar, copia)
#inserto desde la tabla original los articulos no duplicados
insertar = """INSERT INTO copia_nombre SELECT id, articulo, cantidad, talle, color, costo, ganancia, precio FROM nombre"""
cur.execute(insertar)
#elimino la tabla original
drop = """DROP TABLE nombre"""
cur.execute(drop)
#y renombro la copia con el nobre de la tabla original
alter= """ALTER TABLE copia_nombre RENAME TO nombre"""
cur.execute(alter)
conn.commit()
return True
except connector.Error as err:
print(f"Error at insert_recuoe function: {err.msg}")
return False
finally:
cur.close()
conn.close()