sto cercando di eliminare alcune righe figlio utilizzando una query filtrata senza risultato:SQLAlchemy cancellare subquery
sl = DBSession.query(Puesto.id).filter(Puesto.locales_id == id).subquery()
DBSession.query(Servicio).filter(Servicio.puestos_id.in_(sl)).delete()
sto ottenendo InvalidRequestError: Could not evaluate current criteria in Python. Specify 'fetch' or False for the synchronize_session parameter.
come errore.
completa analisi dello stack:
Traceback (most recent call last):
File "/usr/src/tg2env/ceaf/ceaf/controllers/root.py", line 1673, in delete_local
DBSession.query(Servicio).filter(Servicio.puestos_id.in_(sl)).delete()
File "/usr/src/tg2env/lib/python2.4/site-packages/SQLAlchemy-0.6.6-py2.4.egg/sqlalchemy/orm/query.py", line 2126, in delete
raise sa_exc.InvalidRequestError(
InvalidRequestError: Could not evaluate current criteria in Python. Specify 'fetch' or False for the synchronize_session parameter.
io non sono in grado di trovare dove il problema è ...
Qualche idea?
saluti
Il primo approccio funziona alla grande. Perché ora lavorare con synchronize_session = 'valutare'? – LooPer
Poiché l'eliminazione utilizza 'in_' con una sottoquery, è necessaria una query' select' per 'MetaData' per decidere quale dei suoi oggetti in memoria scade. Passare questa opzione dà il permesso di farlo. Farlo incondizionatamente rischierebbe di ottenere prestazioni scadenti in determinate situazioni. – wberry
Questo documento dice anche che se commettiamo immediatamente, non è necessario chiamare session.expire_all(), con autocommit = False. – giga