1. ホーム
  2. python

Pythonでオブジェクト/インスタンス/変数の存在をエレガントにチェックし、同時に存在する場合は変数に代入する方法は?

2023-08-21 20:36:36

質問

私はSQLAlchemyを使ってデータベースにデータを入力していますが、しばしば、処理の前にデータベースにormオブジェクトが存在するかどうかをチェックする必要があります。これは型破りな質問かもしれませんが、私自身、このパターンによく遭遇することに気づきました。

my_object = session.query(SomeObject).filter(some_fiter).first()
if my_object: # Mostly in databases...
    # Juchee it exists
    # process
else:
    # It does not exist. :-(
    my_object = SomeObject()
    # process

私とは <強い 夢想 のようなものでしょう。

if my_object = session.query(someObject).blabla.first():
    # if my_object is None this scope is left alone
    # if my_object is not None I can work with my_object here...

私はこの構文が間違っていることを知っていますが、私はこの例で何を意味するのかを説明したかったのです。任意の等価な方法は、私が幸せになる。

このパターンのためのエレガントな python アプローチはありますか?この質問は SQLAlchemy だけでなく、同等のシナリオに向けたものです。

目を閉じて "Post your question" を押して、賢い人々と心の中の pythonistas が、不適切かもしれないことを尋ねたために私を追い詰めるのを待ちます。 ;-)

どのように解決するのですか?

Existクエリを効率的に実行したい。

(ret, ), = Session.query(exists().where(SomeObject.field==value))

Mike Bayerのブログ記事で説明されています。

http://techspot.zzzeek.org/2008/09/09/selecting-booleans/

タプルを結果にしたくない場合は、scalarを使用することができます。

ret = Session.query(exists().where(SomeObject.field==value)).scalar()