SQLAlchemy ORMでUPSERTを行う方法

この記事は公開から2年以上経過しています。

Python(3.9) + SQLAlchemy(1.4) ORM + SQLite(3.39)を使用してUPSERTを行ってみたので、対応方法についての備忘録。

SQLAlchemyでORMを利用する方法については、過去のエントリー「PythonでOracle DatabaseからSQL Serverにデータをコピーする(ORM編)」をご参照下さい。


対応方法

SQLAlchemyのコンパイラ拡張を使い、ORMが生成するINSERT文にON CONFLICT DO NOTHINGサフィックスを付与する。


サンプルソースコード

from sqlalchemy.ext.compiler import compiles
from sqlalchemy.sql import Insert

@compiles(Insert)
def suffix_insert(insert, compiler, **kw):
    return compiler.visit_insert(insert, **kw) + ' ON CONFLICT DO NOTHING'

# SQLAlchemy ORMを使ったアプリケーションの処理

今回はSQLiteの場合について紹介しましたが、ORMが生成するSQLを書き換えることができるため、他のデータベースでも同様の対応できるかと思います。

SQLAlchemyコンパイラ拡張についての詳細は、参考ウェブサイトのSQLAlchemy公式ドキュメントをご参照ください。


参考ウェブサイトなど

以上です。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする