13

SQLAlchemyとそのSQL式言語のSQL「INSERTORREPLACE」句に相当するものを知っている人はいますか?

どうもありがとう-honzas

4

4 に答える 4

9

どうSession.mergeですか?

Session.merge(instance, load=True, **kw)

インスタンスの状態を、同じ識別子を持つ永続インスタンスにコピーします。

セッションに現在関連付けられている永続インスタンスがない場合は、ロードされます。永続インスタンスを返します。指定されたインスタンスが保存されていない場合は、のコピーを保存し、それを新しい永続インスタンスとして返します。指定されたインスタンスはセッションに関連付けられません。関連付けが cascade="merge" でマップされている場合、この操作は関連付けられたインスタンスにカスケードされます。

http://www.sqlalchemy.org/docs/reference/orm/sessions.htmlから

于 2010-04-08T17:58:19.457 に答える
6
Session.save_or_update(model)
于 2009-04-02T08:11:02.127 に答える
5

INSERT OR REPLACEはどのSQL標準にも含まれているとは思いません(間違っている場合は訂正してください)。これはSQLite固有のものです。MERGEがありますが、それはすべての方言でサポートされているわけではありません。そのため、SQLAlchemyの一般的な方言では使用できません。

最もクリーンな解決策は、M。Utkuが提案したように、Sessionを使用することです。また、SAVEPOINTを使用して、IntegrityErrorを除く挿入を保存してみてください。その後、ロールバックして更新を実行することもできます。3番目の解決策は、OUTER JOINと、nullを含む行をフィルタリングするWHERE句を使用してINSERTを作成することです。

于 2009-04-02T12:10:45.623 に答える
1

SQLAlchemyでOR REPLACEいわゆるものとして使用できます-SQLステートメントの間に配置する方法のドキュメントはここにありますprefixInsertOR REPLACEINSERTINTO

于 2011-04-21T14:35:43.337 に答える