Suponga que la tabla tiene tres columnas: username
, password
y no_of_logins
.Cómo actualizar la entrada de la fila SQLAlchemy?
Cuando el usuario intenta iniciar sesión, es marcada por una entrada con una consulta como
user=User.query.filter_by(username=form.username.data).first()
Si contraseña coincide, se procede aún más. Lo que me gustaría hacer es contar cuántas veces el usuario inició sesión. Por lo tanto, cada vez que inicia sesión con éxito, me gustaría incrementar el campo no_of_logins
y almacenarlo de nuevo en la tabla de usuarios. No estoy seguro de cómo ejecutar la consulta de actualización con SqlAlchemy.
http://stackoverflow.com/a/2334917/125507 dice que esto es una mala manera de hacerlo. ¿Qué sucede si la fila aún no existe? – endolith
Según el enlace del endolito, 'user.no_of_logins + = 1' puede crear condiciones de carrera. En su lugar, use 'user.no_of_logins = user.no_of_logins + 1'. Traducido a sql, la última forma correcta se convierte en: 'SET no_of_logins = no_of_logins + 1'. – ChaimG
@ChaimG Supongo que quería decir 'user.no_of_logins = User.no_of_logins + 1', o en otras palabras usar el atributo instrumentado del modelo para producir una expresión SQL. Como es su comentario muestra 2 maneras de producir la misma condición de carrera. –