2014-10-17 4 views
2

다른 세션에서 두 개의 존재 테이블로 테이블을 만들고 싶습니다. 예를 들어SQLAlchemy upsert

:

User {uid, fname, lname} 
Salary {uid, salary} 
=> NewTable {uid, full_name, salary} 

우선은 NewTable로 사용자를 "추가", 급여가 null -

n = NewTable(uid=0, full_name=(user.fname+user.lname)) 
session.add(n) 
session.commit() 

OK> ... 커밋과 다른 뭔가. ..

그리고 나서 Salary를 NewTable에 병합합니다. 급여는 괜찮지 만 full_name은 없어졌습니다.

n2 = NewTable(uid=0, salary=100) 
session.merge(n2) 
session.commit() 

왜? 어떻게 내가 어떤 분야를 업서 트할 수 있습니까? 또는 이와 같이 자동으로 결합합니다.

+0

보았다 : http://stackoverflow.com/questions/7165998/how-to-do-an-upsert-with-sqlalchemy – avi

+0

가능한 복제본 [SQLAlchemy - postgresql에서 대량 업데이트를 수행하는 경우 (존재하는 경우 업데이트, 그렇지 않으면 삽입) ] (http://stackoverflow.com/questions/25955200/sqlalchemy-performing-a-bulk-upsert-if-exists-update-else-insert-in-postgr) – davidism

답변

0

결국 내 해결책을 찾았습니다.

를 사용하여 완전히 새로운 개체를 덮어 쓰지 않도록하기 위해 "선택 및 업데이트"두 테이블의 첫 번째 테이블에 대한


에서 삽입

: 두 번째 테이블

session.add(doc) 

:

session.query(NewTable).filter(NewTable.uid == doc.uid).update(doc)