SQLAlchemyとそのSQL式言語のSQL「INSERTORREPLACE」句に相当するものを知っている人はいますか?
どうもありがとう-honzas
どうSession.merge
ですか?
Session.merge(instance, load=True, **kw)
インスタンスの状態を、同じ識別子を持つ永続インスタンスにコピーします。
セッションに現在関連付けられている永続インスタンスがない場合は、ロードされます。永続インスタンスを返します。指定されたインスタンスが保存されていない場合は、のコピーを保存し、それを新しい永続インスタンスとして返します。指定されたインスタンスはセッションに関連付けられません。関連付けが cascade="merge" でマップされている場合、この操作は関連付けられたインスタンスにカスケードされます。
http://www.sqlalchemy.org/docs/reference/orm/sessions.htmlから
Session.save_or_update(model)
INSERT OR REPLACEはどのSQL標準にも含まれているとは思いません(間違っている場合は訂正してください)。これはSQLite固有のものです。MERGEがありますが、それはすべての方言でサポートされているわけではありません。そのため、SQLAlchemyの一般的な方言では使用できません。
最もクリーンな解決策は、M。Utkuが提案したように、Sessionを使用することです。また、SAVEPOINTを使用して、IntegrityErrorを除く挿入を保存してみてください。その後、ロールバックして更新を実行することもできます。3番目の解決策は、OUTER JOINと、nullを含む行をフィルタリングするWHERE句を使用してINSERTを作成することです。
SQLAlchemyでOR REPLACE
いわゆるものとして使用できます-SQLステートメントの間に配置する方法のドキュメントはここにありますprefix
Insert
OR REPLACE
INSERT
INTO