Chcę zduplikować egzemplarz modelu (wiersz) w SQLAlchemy za pomocą narzędzia orm. Moją pierwszą myślą było, aby to zrobić:SQLAlchemy: Modyfikacja odłączonego obiektu
i = session.query(Model)
session.expunge(i)
old_id = i.id
i.id = None
session.add(i)
session.flush()
print i.id #New ID
Jednak najwyraźniej wolnostojący obiekt nadal „pamięta”, co id miał, chociaż ustawić identyfikator Żaden natomiast został oderwany. W ten sposób session.flush() próbuje wykonać UPDATE, zmieniając klucz podstawowy na wartość null.
Czy to oczekiwane zachowanie? Jak mogę usunąć "pamięć" tego atrybutu i traktować odłączony obiekt jako nowy obiekt po ponownym dodaniu go do sesji? Jak ogólnie można sklonować instancję modelu SQLAlchemy?
Dzięki, nie widział go w docs. –
Jaki jest właściwy sposób kopiowania relacji, @zzzeek? – jmagnusson
Ja też jestem zainteresowany czymś podobnym. Interesuje mnie klonowanie encji (wiersza) wraz ze wszystkimi jej elementami podrzędnymi (wiersze w innych tabelach, z kluczami obcymi wskazującymi w tym wierszu) i dołączanie tego nowego duplikatu wiersza i jego duplikatów do nowej jednostki nadrzędnej za pomocą innego klucza obcego w nowym zduplikowanym wierszu (ale bez wpływu na istniejącą jednostkę i jej elementy podrzędne). Widzę tę częściową odpowiedź na inne pytanie na SO: http://stackoverflow.com/questions/20112850/sqlalchemy-clone-table-row-with-relations?lq=1 – Soferio