python - query - sqlalchemy select
SQLAlchemy: ModificaciĆ³n de objeto separado (2)
este caso está disponible usando la función auxiliar make_transient() :
inst = session.query(Model).first()
session.expunge(inst)
make_transient(inst)
inst.id = None
session.add(inst)
session.flush()
print inst.id #New ID
Quiero duplicar una instancia de modelo (fila) en SQLAlchemy usando el orm. Mi primer pensamiento fue hacer esto:
i = session.query(Model)
session.expunge(i)
old_id = i.id
i.id = None
session.add(i)
session.flush()
print i.id #New ID
Sin embargo, al parecer, el objeto separado aún "recuerda" la identificación que tenía, a pesar de que la configuré en Ninguna mientras estaba desconectada. Por lo tanto, session.flush () intenta ejecutar una ACTUALIZACIÓN cambiando la clave primaria a nula.
¿Es este el comportamiento esperado? ¿Cómo puedo eliminar la ''memoria'' de este atributo y simplemente tratar el objeto separado como un nuevo objeto al agregarlo nuevamente a la sesión? ¿Cómo, en general, se clona una instancia del modelo SQLAlchemy?
def duplicate(self):
arguments = dict()
for name, column in self.__mapper__.columns.items():
if not (column.primary_key or column.unique):
arguments[name] = getattr(self, name)
return self.__class__(**arguments)