SQLAlchemy: проверьте, присутствует ли объект в таблице.

У меня есть класс Item, чей id является первичным ключом и автоматически сгенерирован. Теперь я читаю данные из другого внешнего источника, создаю объект Item и должен проверить, присутствует ли этот объект в моей таблице items. Как это сделать?

Ответ 1

Вы можете запросить элементы, которые имеют одинаковые атрибуты, и проверить, больше ли число count больше нуля.

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

Ответ 2

Наиболее эффективным способом является использование exists()

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

Ответ 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