weiß jemand, was entspricht SQL "INSERT OR REPLACE" -Klausel in SQLAlchemy und seine SQL-Ausdruck Sprache?SQLAlchemy - INSERT OR REPLACE Äquivalent
Vielen Dank - honzas
weiß jemand, was entspricht SQL "INSERT OR REPLACE" -Klausel in SQLAlchemy und seine SQL-Ausdruck Sprache?SQLAlchemy - INSERT OR REPLACE Äquivalent
Vielen Dank - honzas
Ich glaube nicht, (korrigiert mich wenn ich falsch liege) INSERT OR REPLACE in einem der SQL-Standards ist; Es ist eine SQLite-spezifische Sache. Es gibt MERGE, aber das wird auch nicht von allen Dialekten unterstützt. Daher ist es in SQLAlchemys allgemeinem Dialekt nicht verfügbar.
Die sauberste Lösung ist Session zu verwenden, wie von M. Utku vorgeschlagen. Sie können auch SAVEPOINTs verwenden, um zu speichern, versuchen Sie: ein Einfügen, außer IntegrityError: dann Rollback und führen Sie stattdessen ein Update. Eine dritte Lösung besteht darin, INSERT mit einem OUTER JOIN und einer WHERE-Klausel zu schreiben, die die Zeilen mit Nullen filtert.
Session.save_or_update(model)
Was ist mit Session.merge
?
Kopieren Sie den Status eine Instanz auf die persistente Instanz mit dem gleichen Bezeichner.
Wenn derzeit keine dauerhafte Instanz mit der Sitzung verknüpft ist, wird sie geladen. Gibt die persistente Instanz zurück. Wenn die angegebene Instanz nicht gespeichert ist, speichern Sie eine Kopie von und geben Sie sie als neu persistente Instanz zurück. Die angegebene Instanz wird nicht mit der Sitzung verknüpft. Diese Operation kaskadiert zu verknüpften Instanzen, wenn die Zuordnung mit cascade = "merge" zugeordnet ist.
von http://www.sqlalchemy.org/docs/reference/orm/sessions.html
Sie OR REPLACE
als sogenannte prefix
in Ihrem SQLAlchemy Insert
verwenden können - die Dokumentation, wie OR REPLACE
zwischen INSERT
und INTO
in Ihrer SQL-Anweisung zu platzieren ist here
Dies ist ähnlich [diese Antwort] (http://stackoverflow.com/questions/2218304/sqlalchemy-insert-ignore/2224729#2224729). –
Das ist nicht mein Fall. Ich benutze keine Sitzung, ich verwende Connection direkt, also muss es mit SQL Ausdruck Sprache und conn.execute (...) getan werden – honzas
Wie auch immer, das ist 0,4 SQLA spezifisch, für 0,5 müssen Sie Session.add verwenden (Modell) – Jiri