Sto cercando di costruire automaticamente una copia di un SA-mapped oggetto .. Al momento la mia funzione è solo:SQLAlchemy: copia superficiale evitando lazy loading
newobj = src.__class__()
for prop in class_mapper(src.__class__).iterate_properties:
setattr(newobj, prop.key, getattr(src, prop.key))
ma sto avendo problemi con le relazioni pigre ... Ovviamente getattr attiva il caricamento lazy, ma poiché non ho bisogno dei loro valori a destra dello , mi piacerebbe solo copiare il "questo dovrebbe essere pigro carico" -stato di l'attributo .. . È possibile?
Modifica: Ho bisogno di questo per un sistema di "registrazione dati". Cioè, ogni volta che qualcuno aggiorna un'entità persistente, devo generare un nuovo record e quindi contrassegnare quello vecchio come tale.
Per fare questo, creo una copia superficiale dell'entità (quindi SQLA emette un INSERT invece di un UPDATE) e lavora da lì .. Il sistema funziona in modo abbastanza piacevole (è stato utilizzato in produzione per mesi) ma ora I 'Mi piacerebbe migliorarlo in modo che non abbia bisogno che tutte le relazioni vengano caricate prima.
È la registrazione di modifica? Sembra più simile al sistema di controllo delle versioni mantenendo la cronologia di tutti gli stati storici. –
Esattamente, mantiene ogni versione dell'entità – Joril
invece di 'class_mapper (src .__ class __)', esegue 'object_mapper (src)'. Evita di accedere direttamente agli attributi '__foo__'. – nosklo