SQLAlchemy와 SQL 표현식 언어에서 SQL "INSERT OR REPLACE"절이 무엇인지 아는 사람이 있습니까?SQLAlchemy - INSERT OR REPLACE 해당 항목
많은 감사 - honzas
SQLAlchemy와 SQL 표현식 언어에서 SQL "INSERT OR REPLACE"절이 무엇인지 아는 사람이 있습니까?SQLAlchemy - INSERT OR REPLACE 해당 항목
많은 감사 - honzas
나는 (내가 틀렸다면 정정 해줘) 생각하지 않는다 삽입하거나 SQL 표준의에 교체; 그것은 SQLite에 특정한 것입니다. MERGE가 있지만 모든 방언 중 하나에서 지원되지는 않습니다. 따라서 SQLAlchemy의 일반적인 사투리에서는 사용할 수 없습니다.
M. Utku의 제안처럼 가장 깨끗한 해결책은 세션을 사용하는 것입니다. 또한 SAVEPOINT를 사용하여 SAVEPOINT를 사용하여 다음을 시도해보십시오. IntegrityError를 제외한 삽입을 시도한 다음 롤백하고 대신 업데이트를 수행하십시오. 세 번째 해결 방법은 NULL로 행을 필터링하는 OUTER JOIN 및 WHERE 절을 사용하여 INSERT를 작성하는 것입니다.
Session.save_or_update(model)
약 Session.merge
?
Session.merge(instance, load=True, **kw)
동일한 식별자를 사용하여 인스턴스를 인스턴스로 복사합니다.
현재 세션과 연결된 영구 인스턴스가 없으면로드됩니다. 지속 인스턴스를 돌려줍니다. 지정된 인스턴스가 저장되지 않은 경우 복사본을 저장하고 새로 영구 인스턴스로 반환하십시오. 주어진 인스턴스는 세션과 연관되지 않습니다. 이 작업은 연관이 cascade = "merge"로 매핑되는 경우 연관된 인스턴스에 계단식으로 연결됩니다. http://www.sqlalchemy.org/docs/reference/orm/sessions.html
에서
당신은 당신의 SQLAlchemy의 Insert
에 prefix
소위로 OR REPLACE
사용할 수 있습니다 - 당신의 SQL 문에 INSERT
와 INTO
사이 OR REPLACE
을 배치하는 방법에 대한 문서는 here
이것은 [이 답변] (http://stackoverflow.com/questions/2218304/sqlalchemy-insert-ignore/2224729#2224729)과 유사합니다. –
이가 아닌 내 케이스. 나는 세션을 사용하지 않는다. Connection을 직접 사용하기 때문에 SQL 표현식 언어와 conn.execute (...)를 사용하여 완료해야한다. ... – honzas
어쨌든 이것은 0.4 SQLA에 고유하며, 0.5는 Session.add를 사용해야한다. (모델) – Jiri