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

290
Vistas
Las actualizaciones del campo JSON no persisten en la base de datos

Tenemos un modelo con un campo JSON donde se insertan indicadores de usuario. La inserción funciona como se esperaba, pero al eliminar ciertos indicadores, permanecen en el campo y los cambios no se conservan en la base de datos.

Tenemos el siguiente método en nuestro modelo:

 def del_flag(self, key): if self.user_flags is None or not key in self.user_flags: return False else: del self.user_flags[key] db.session.commit() return True

La base de datos es postgres y usamos el dialecto de campo SQLalchemy JSON para el tipo de campo. ¿Algún consejo sobre esto?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Si está utilizando Postgres < 9.4, no puede actualizar el campo JSON directamente. Necesita la función flag_modified para informar el cambio a SQLAlchemy:

 from sqlalchemy.orm.attributes import flag_modified model.data['key'] = 'New value' flag_modified(model, "data") session.add(model) session.commit()
over 4 years ago · Santiago Trujillo Denunciar

0

Estoy usando el campo JSON y me referí a continuación en el documento.

https://docs.sqlalchemy.org/en/13/core/type_basics.html?highlight=json#sqlalchemy.types.JSON

Muestra cómo hacer que el campo JSON-dict sea mutable. (El valor predeterminado es inmutable)

Me gusta esto..

 from sqlalchemy.ext.mutable import MutableDict from sqlalchemy import Column, Integer, JSON class TableABC(Base): __tablename__ = 'table_abc' id = Column(Integer, primary_key=True) info = Column(MutableDict.as_mutable(JSON))

Entonces podría actualizar el campo json como ORM.

over 4 years ago · Santiago Trujillo Denunciar

0

Mi problema fue hacer referencia al objeto de fila devuelto por SQLAlchemy al crear la nueva fila. por ejemplo, esto no funciona :

 row = db.session.query(SomeTable).filter_by(id=someId).first() print(row.details) newDetails = row.details newDetails['key'] = 'new data' row.details = newDetails db.session.commit()

pero crear un nuevo dict funciona

 row = db.session.query(SomeTable).filter_by(id=someId).first() print(row.details) newDetails = dict(row.details) newDetails['key'] = 'new data' row.details = newDetails db.session.commit()

aviso dict(row.details)

over 4 years ago · Santiago Trujillo Denunciar
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