Modificación de tabla de BDD con Python

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
colectivohedera
Mensajes: 3
Registrado: Lun Mar 20, 2023 8:13 pm

Modificación de tabla de BDD con Python

Mensaje por colectivohedera »

Estoy empezando con Python. Ya ejecuto programas simples y accedo a la bdd mysql recuperando datos.
El paso siguiente que quiero probar es leer de una tabla un conjunto de registros e iterar el cursor para modificarlos uno a uno, con una update.
El problema es que al realizar el execute sobre el cursor de la update (diferente del cursor de la select) me da el error "unread result found"
El código es el siguiente:

# Crear cursor para leer registros
cursor1 = conexion.cursor()
cursor1.execute("SELECT * FROM prueba")

# Leer resultados del cursor1
for registro in cursor1:
# Crear cursor para modificar registro
cursor2 = conexion.cursor()
cursor2.execute("UPDATE prueba SET cadena = %s WHERE id = %s", ("modificado", registro[0]))
conexion.commit()
cursor2.close()

# Cerrar cursor1
cursor1.close()

Por lo que he investigado, parece que no se puede ejecutar un cursor dentro del bucle de iteración de otro. Hay que usar fetchall para cargar todas las filas recuperadas en una variable, cerrar el cursor y entonces iterar sobre la variable para hacer las updates.
El problema es que con tablas grandes esa estrategia consume mucha memoria. ¿No hay otra solución? Desde BASIC esa operación se puede realizar sin ningún problema.
Libreoffice 7.0.4.2 sobre Ubuntu 20.04
Responder