ホームページ > データベース > mysql チュートリアル > SQLAlchemy で INSERT ... ON DUPLICATE KEY UPDATE を効率的に実行する方法は?

SQLAlchemy で INSERT ... ON DUPLICATE KEY UPDATE を効率的に実行する方法は?

Barbara Streisand
リリース: 2024-11-25 15:14:11
オリジナル
1021 人が閲覧しました

How to Efficiently Perform INSERT ... ON DUPLICATE KEY UPDATE in SQLAlchemy?

SQLAlchemy での重複キーの更新

質問: 「INSERT ..」を実行する簡潔な方法はありますか? SQLAlchemy の「.ON DUPLICATE KEY UPDATE」操作ORM?

答え:

SQLAlchemy には、バージョン 1.2 以降の MySQL の「ON DUPLICATE KEY UPDATE」のサポートが組み込まれています。この機能を使用するには、ここで提供されているソリューションを参照してください: https://stackoverflow.com/a/48373874/319066

SQL ステートメント アプローチ:

一般的な状況の場合または MySQL 以外のデータベースの場合は、@compiles デコレータを使用して、生成されたデータベースに「ON DUPLICATE KEY UPDATE」を含めることができます。 SQL ステートメント。例はここにあります: https://github.com/somada141/sqlalchemy-insert-duplicate-update

ORM アプローチ:

SQLAlchemy の ORM は直接サポートしていません「重複キーの更新中。」ただし、主キーの更新の場合は、既存のレコードをチェックし、それに応じて更新する session.merge() 関数を使用できます。

非主キーのカスタム実装:

非主キーの更新が関係する状況では、最初に次のことをチェックする 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 までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート