Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

644
Views
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
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!