SQLAlchemy:检查表中是否已存在对象

时间:2012-10-05 15:00:04

标签: python python-3.x sqlalchemy

我有一个班级Item,其id是主键并自动生成。现在我从其他一些外部源读取数据,创建一个Item对象,并且需要检查我的items表中是否已存在此对象。我该怎么做?

3 个答案:

答案 0 :(得分:13)

最有效的方法是使用exists()

q = session.query(Item.id).filter(Item.email==email)
session.query(q.exists()).scalar()    # returns True or False

答案 1 :(得分:11)

您可以查询具有相同属性的项目,并检查计数是否大于零。

if session.query(Item.id).filter(Item.email==newItem.email,
                                 Item.type==newItem.type).count() > 0:
    // item exists

答案 2 :(得分:2)

你可以尝试类似的东西:

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