Cuando intento actualizar un valor de fila en una tabla usando Flask-SQLAlchemy, aparece el siguiente error:
>>> row.meta_value = "new value" Traceback (most recent call last): File "<console>", line 1, in <module> File "/home/daniel/Documents/work/breakfast4you/backend/venv/lib/python3.10/site-packages/sqlalchemy/engine/row.py", line 219, in __setattr__ raise AttributeError("can't set attribute") AttributeError: can't set attribute Estoy probando el código antes de implementarlo en el archivo real, por lo que lo estoy ejecutando a través de la flask shell . Realicé otras consultas a través flask shell así que sé que no es un problema.
La tabla pertenece a una base de datos MySQL conectada a través de un motor MariaDB. Este es su modelo de mesa:
t_aus_postmeta = db.Table( 'aus_postmeta', db.Column('post_id', db.BigInteger, nullable=False, server_default=db.FetchedValue()), db.Column('meta_key', db.String(255, 'utf8mb4_unicode_ci')), db.Column('meta_value', db.String(collation='utf8mb4_unicode_ci')) )Y esta es la consulta que estoy ejecutando para recuperar la fila.
>>> row = db.session.query(t_aus_postmeta).\ filter(t_aus_postmeta.c.post_id == 740).\ filter(t_aus_postmeta.c.meta_key == "_billing_shipment").\ first()Pude ejecutar la misma consulta usando SQL simple a través de DBeaver:
UPDATE aus_postmeta SET meta_value = "Cumpleaños" WHERE post_id = 740 AND meta_key = "_billing_shipment";Teniendo en cuenta la respuesta aceptada a esta pregunta casi idéntica , probé:
tuple ..filter como filter(meta.c.meta_key.in_([<array of meta_keys>])) (que fue mi primera intención, ya que necesito editar varias filas). Siguiendo el consejo sobre esa misma pregunta, también realicé la siguiente prueba para ver si el objeto era de tipo tuple . Lo dudaba, (ya que es solo una fila), pero aún así:
>>> row (740, '_billing_shipment', 'Cumpleaños') >>> type(row) <class 'sqlalchemy.engine.row.Row'> >>> issubclass(type(row), tuple) FalseEDITAR: Mirando más a fondo en las versiones de mi paquete,
SQLAlchemy == 1.4.31 Flask-SQLAlchemy == 2.5.1Este comentario de GitHub sugiere que se solucionó en Flask-SQLAlchemy 2.5 y, posteriormente, esta respuesta establece que ya no es necesario degradar SQLAlchemy , por lo que las versiones de mi paquete deberían solucionar este problema.
¿Qué más podría estar causando este error? ¿Cómo puedo arreglarlo?