我有一个用户更新功能,我允许用户更改他们的电子邮件地址,但相同的地址在数据库中必须是唯一的,所以在我更新之前,我必须检查他们的新电子邮件是否已经存在于数据库中,但我用来检查的查询返回同一行。例子:
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 将更新提交到数据库,但在某种事务下,因此我的查询返回我正在编辑的同一用户。我已经通过创建第二个会话对象解决了这个问题,但似乎有点矫枉过正。有更好的想法吗?我说得有道理吗?