ホームページ > データベース > mysql チュートリアル > SQLAlchemy で INSERT ... ON DUPLICATE KEY UPDATE 機能を実現するにはどうすればよいですか?

SQLAlchemy で INSERT ... ON DUPLICATE KEY UPDATE 機能を実現するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-23 21:21:12
オリジナル
186 人が閲覧しました

How Can I Achieve INSERT ... ON DUPLICATE KEY UPDATE Functionality in SQLAlchemy?

SQLAlchemy のエレガントな ON DUPLICATE KEY UPDATE

SQLAlchemy には、次を使用して「INSERT ... ON DUPLICATE KEY UPDATE」操作を実行するためのシームレスなソリューションがありません。その ORM 層。ただし、同様の機能を実現するための回避策があります。

組み込み MySQL サポート

MySQL データベースの場合、SQLAlchemy は ON DUPLICATE KEY UPDATE の組み込みサポートを提供するようになりました。これは、次の構文を使用して実現できます。

inserter = my_table.insert()
inserter.execute(list_of_dictionaries)
ログイン後にコピー

パラメータ化された ON DUPLICATE KEY UPDATE

他の目的で生成された SQL ステートメントに ON DUPLICATE KEY UPDATE 句を含めるにはデータベースでは、デコレータを使用して必要なデータを追加できます。 string:

@compiles(Insert)
def append_string(insert, compiler, **kw):
    s = compiler.visit_insert(insert, **kw)
    if 'append_string' in insert.kwargs:
        return s + " " + insert.kwargs['append_string']
    return s

my_connection.execute(my_table.insert(append_string = 'ON DUPLICATE KEY UPDATE foo=foo'), my_values)
ログイン後にコピー

主キーの ORM 機能

一意のキーが主キーである ORM オブジェクトの場合、SQLAlchemy の session.merge() 関数を利用できます。 ON DUPLICATE KEY UPDATE を複製する機能:

session.merge(ModelObject)
ログイン後にコピー

非主キーのカスタム実装

非主キーの一意制約の場合、Django の get_or_create() に似たカスタム関数を作成して、望ましい動作を達成する:

def get_or_create(session, model, defaults=None, **kwargs):
    instance = session.query(model).filter_by(**kwargs).first()
    if instance:
        return instance
    else:
        params = {k: v for k, v in kwargs.items() if not isinstance(v, ClauseElement)}
        if defaults:
            params.update(defaults)
        instance = model(**params)
        return instance
ログイン後にコピー

以上がSQLAlchemy で INSERT ... ON DUPLICATE KEY UPDATE 機能を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート