ユーザー更新機能があり、ユーザーがメールアドレスを変更できるようにしていますが、同じアドレスはデータベース内で一意である必要があるため、更新する前に、新しいメールがデータベースに既に存在するかどうかを確認する必要がありますが、確認に使用するクエリ同じ行を返します。例:
user = User.query.get(1)
user.email = 'some@email.com'
if user.validate(): # The validate function performs a query to see if 'some@email.com' is already taken
user.save()
今私が持っている検証機能に入ります:
check = User.query.filter_by(User.email='some@email.com').first()
if check:
# email already exists
問題は、check
私が編集しているのと同じユーザーを保持していることです。Sqlalchemy は更新をデータベースに送信しますが、何らかのトランザクションの下で実行されるため、クエリは編集中の同じユーザーを返します。2 番目のセッション オブジェクトを作成することでこれを解決しましたが、やり過ぎのようです。より良いアイデアはありますか?私は理にかなっていますか?