我有一个类Item
,它的id
是主键并自动生成。现在我从某个外部来源读取数据,创建一个Item
对象,并需要检查这个对象是否已经存在于我的items
表中。我应该如何做?
我有一个类Item
,它的id
是主键并自动生成。现在我从某个外部来源读取数据,创建一个Item
对象,并需要检查这个对象是否已经存在于我的items
表中。我应该如何做?
最有效的方法是使用exists()
q = session.query(Item.id).filter(Item.email==email)
session.query(q.exists()).scalar() # returns True or False
if session.query(Item.id).filter(Item.email==newItem.email,
Item.type==newItem.type).count() > 0:
// item exists
from sqlalchemy import exc
try:
session.add(item)
session.commit()
except exc.IntegrityError:
session.rollback()
print 'This item fails one of the unique/foreign key checks!'
except:
print 'There was another error'
raise
else:
print 'Everything is OK'
这种方法的问题在于它会在提交时执行,然后回滚...
如果您可以逐个检查属性,则另一种选择可能有效:
session.query(Item).filter_by(x=item.x, y=item.y).count() == 0