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 サイトの他の関連記事を参照してください。