¿Cómo puedo actualizar la información de una fila?
Por ejemplo, me gustaría modificar la columna de nombre de la fila que tiene la identificación 5.
python
sqlalchemy
flask-sqlalchemy
pocorschi
fuente
fuente
uesd_at = db.Column(db.DateTime)
simplemente ejecutoobj.used_at = datetime.datetime.now()
db.session.commit()
Pero no valor establecido en el campo.Hay un método
update
en el objeto BaseQuery en SQLAlchemy, que es devuelto porfilter_by
.La ventaja de usar
update
sobre el cambio de entidad viene cuando hay muchos objetos para actualizar.Si quieres dar
add_user
permiso a todos losadmin
s,Observe que
filter_by
toma argumentos de palabras clave (use solo uno=
) en lugar de lofilter
que toma una expresión.fuente
admin
, lo que puede ser engañoso ya que el resultado será el número de filas actualizadas. ¿No es así?User
elementos afectados por la consulta, no la cantidad de usuarios afectados?Esto no funciona si modifica un atributo decapado del modelo. Los atributos en escabeche deben reemplazarse para activar actualizaciones:
fuente
data
y reasignarlo.user.data = data
Simplemente asignar el valor y confirmarlos funcionará para todos los tipos de datos, excepto los atributos JSON y Pickled. Dado que el tipo en escabeche se explica anteriormente, anotaré una forma ligeramente diferente pero fácil de actualizar JSON.
Digamos que el modelo es como el anterior.
Esto agregará al usuario a la base de datos MySQL con datos {"country": "Sri Lanka"}
Se ignorará la modificación de datos. Mi código que no funcionó es el siguiente.
En lugar de pasar por el doloroso trabajo de copiar el JSON a un nuevo dictado (sin asignarlo a una nueva variable como arriba), que debería haber funcionado, encontré una manera simple de hacerlo. Hay una forma de marcar el sistema de que los JSON han cambiado.
A continuación se muestra el código de trabajo.
Funcionó como por arte de magia. Hay otro método propuesto junto con este método aquí Espero haber ayudado a alguien.
fuente
db.session.merge(user)
agregar este código funcionó para mí, FYI.