Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

628
Visualizações
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 à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda