Supposons que la table comporte trois colonnes: username
, password
et no_of_logins
.Comment mettre à jour l'entrée de ligne SQLAlchemy?
Lorsque l'utilisateur tente de se connecter, il est vérifié pour une entrée avec une requête comme
user=User.query.filter_by(username=form.username.data).first()
Si des correspondances de mot de passe, il poursuit plus loin. Ce que je voudrais faire est de compter combien de fois l'utilisateur s'est connecté. Ainsi, chaque fois qu'il se connecte avec succès, je voudrais incrémenter le champ no_of_logins
et le stocker dans la table des utilisateurs. Je ne suis pas sûr comment exécuter la requête de mise à jour avec SqlAlchemy.
http://stackoverflow.com/a/2334917/125507 dit que c'est une mauvaise façon de le faire. Aussi, que faire si la ligne n'existe pas encore? – endolith
Selon le lien de l'endolithe, 'user.no_of_logins + = 1' peut créer des conditions de concurrence. Au lieu de cela, utilisez 'user.no_of_logins = user.no_of_logins + 1'. Traduit en sql la dernière manière correcte devient: 'SET no_of_logins = no_of_logins + 1'. – ChaimG
@ChaimG Je suppose que vous vouliez dire 'user.no_of_logins = User.no_of_logins + 1', ou en d'autres termes utilisez l'attribut instrumenté du modèle pour produire une expression SQL. Comme il est votre commentaire affiche 2 façons de produire la même condition de course. –