Uso SqlAlchemy per connettersi al back-end del mio database e fare un uso intensivo di multiprocessing nella mia applicazione Python. Sono giunto a una situazione che richiede il passaggio di un riferimento a un oggetto, che è il risultato di una query di database, da un processo a un altro.SqlAlchemy e Multiprocessing
Questo è un problema, perché quando si accede a un attributo dell'oggetto, SQLAlchemy trys per riattaccare l'oggetto nella sessione corrente del altro processo, che non riesce con un'eccezione, poiché l'oggetto è attaccato in un'altra sessione:
InvalidRequestError: Object '<Field at 0x9af3e4c>' is already attached to session '148848780' (this is '159831148')
Qual è il modo di gestire questa situazione? È possibile staccare l'oggetto dalla prima sessione o clonare l'oggetto senza la roba relativa all'ORM?
Solo un suggerimento: Hai provato la fusione l'oggetto in la nuova sessione? http://www.sqlalchemy.org/docs/orm/session.html#merging –
session.expunge (obj) rende sqlalchemy dimenticare obj. Tuttavia, se si cambia obj in seguito, le modifiche non vengono più commesse nel database. Il suggerimento di maksymko è sicuramente migliore. – Simon
L'attributo sull'oggetto è un altro oggetto memorizzato nel database? Ad esempio è una chiave straniera o un blob? –