Ich benutze SqlAlchemy, um eine Verbindung zu meinem Datenbank-Backend herzustellen und in meiner Python-Anwendung intensiv Multiprocessing zu verwenden. Ich kam zu einer Situation, die es erfordert, eine Objektreferenz, die das Ergebnis einer Datenbankabfrage ist, von einem Prozess zu einem anderen zu übergeben.SqlAlchemy und Multiprocessing
Dies ist ein Problem, weil, wenn ein Attribut des Objekts zugreifen, sqlalchemy das Objekt in die aktuelle Sitzung des anderen Prozesses wieder zu befestigen trys, die mit einer Ausnahme fehlschlägt, weil das Objekt in einer anderen Sitzung gebunden ist:
InvalidRequestError: Object '<Field at 0x9af3e4c>' is already attached to session '148848780' (this is '159831148')
Wie geht man mit dieser Situation um? Ist es möglich, das Objekt von der ersten Sitzung zu trennen oder das Objekt ohne das ORM-verwandte Objekt zu klonen?
nur ein Vorschlag: Haben Sie versucht, verschmelzenden das Objekt in die neue Sitzung? http://www.sqlalchemy.org/docs/orm/session.html#merging –
session.expunge (obj) macht sqlalchemy vergessen obj. Wenn Sie jedoch später obj ändern, werden Änderungen nicht mehr an die Datenbank übergeben. Maksymkos Vorschlag ist sicherlich besser. – Simon
Ist das Attribut auf dem Objekt ein anderes Datenbankobjekt? Zum Beispiel ist es ein Fremdschlüssel oder ein Blob? –