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

问题描述 投票:0回答:4

我有一个类

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

python python-3.x sqlalchemy
4个回答
23
投票

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

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

13
投票

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

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

3
投票

你可以尝试类似的方法:

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

0
投票

我想更新 SQLAlchemy 2.0 的答案:

exists_criteria = (
    select(Item.id)
    .filter_by(some_column=some_value)  # update this to suit your situation
    .exists()
)
stmt = select(1).where(exists_criteria)
result = session.scalar(stmt)  # 1 or None

if result:
    # item already exists
    ...
else:
    # item does not exist
    ...
© www.soinside.com 2019 - 2024. All rights reserved.