15

主キーで自動生成されたクラスItemがあります。id次に、他の外部ソースからデータを読み取り、Itemオブジェクトを作成し、このオブジェクトがitemsテーブルにすでに存在するかどうかを確認する必要があります。どうすればいいのですか?

4

3 に答える 3

17

最も効率的な方法は、exists()を使用することです

q = session.query(Item.id).filter(Item.email==email)
session.query(q.exists()).scalar()    # returns True or False
于 2016-05-15T11:54:52.030 に答える
11

同じ属性を持つアイテムをクエリして、カウントがゼロより大きいかどうかを確認できます。

if session.query(Item.id).filter(Item.email==newItem.email,
                                 Item.type==newItem.type).count() > 0:
    // item exists
于 2012-10-05T16:24:49.497 に答える
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
于 2012-10-05T16:32:15.933 に答える