Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

626
Vistas
Error de AttributeError ("no se puede establecer el atributo") al intentar actualizar una tabla usando Flask-SqlAlchemy

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é:

  • Consultando solo una fila, para evitar un objeto tuple .
  • Evite un .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) False

EDITAR: Mirando más a fondo en las versiones de mi paquete,

 SQLAlchemy == 1.4.31 Flask-SQLAlchemy == 2.5.1

Este 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?

over 4 years ago · Santiago Trujillo
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda