[Sqlalchemy-tickets] Issue #4318: Support retrieving Query objects for Bakedqueris (zzzeek/sqlalche
Brought to you by:
zzzeek
From: Sai S. M. <iss...@bi...> - 2018-08-13 17:30:35
|
New issue 4318: Support retrieving Query objects for Bakedqueris https://bitbucket.org/zzzeek/sqlalchemy/issues/4318/support-retrieving-query-objects-for Sai Sindhur Malleni: Trying to use baked queries and refactored this function def get_oldest_pending_db_row_with_lock(context): journal_dep = aliased(models.OpenDaylightJournal) dep_query = context.session.query(journal_dep).filter( models.OpenDaylightJournal.seqnum == journal_dep.seqnum ).outerjoin( journal_dep.depending_on, aliased=True).filter( or_(models.OpenDaylightJournal.state == odl_const.PENDING, models.OpenDaylightJournal.state == odl_const.PROCESSING)) row = context.session.query(models.OpenDaylightJournal).filter( models.OpenDaylightJournal.state == odl_const.PENDING, ~ dep_query.exists() ).order_by( asc(models.OpenDaylightJournal.last_retried)).first() if row: update_db_row_state(context, row, odl_const.PROCESSING) return row to use baked queries, as follows: def get_oldest_pending_db_row_with_lock(): s = session journal_dep = aliased(models.OpenDaylightJournal) dep_query = bakery(lambda s1: session.query(journal_dep)) dep_query += lambda dep_query: dep_query.filter( models.OpenDaylightJournal.seqnum == journal_dep.seqnum) dep_query += lambda dep_query: dep_query.outerjoin( journal_dep.depending_on, aliased=True) dep_query += lambda dep_query: dep_query.filter( or_(models.OpenDaylightJournal.state == odl_const.PENDING, models.OpenDaylightJournal.state == odl_const.PROCESSING)) row = bakery(lambda s2: session.query(models.OpenDaylightJournal)) row += lambda row: row.filter( models.OpenDaylightJournal.state == odl_const.PENDING, ~ dep_query.exists()) row += lambda row: row.order_by( asc(models.OpenDaylightJournal.last_retried)) row(s).all() if row: update_db_row_state(row, odl_const.PROCESSING) return row We are seeing a traceback as follows, Traceback (most recent call last): File "saidb.py", line 129, in <module> get_oldest_pending_db_row_with_lock_baked() File "saidb.py", line 122, in get_oldest_pending_db_row_with_lock_baked row(s).all() File "/usr/lib64/python2.7/site-packages/sqlalchemy/ext/baked.py", line 434, in all return list(self) File "/usr/lib64/python2.7/site-packages/sqlalchemy/ext/baked.py", line 326, in __iter__ baked_context = bq._bake(self.session) File "/usr/lib64/python2.7/site-packages/sqlalchemy/ext/baked.py", line 198, in _bake query = self._as_query(session) File "/usr/lib64/python2.7/site-packages/sqlalchemy/ext/baked.py", line 221, in _as_query query = step(query) File "saidb.py", line 119, in <lambda> ~ dep_query.exists()) AttributeError: 'BakedQuery' object has no attribute 'exists' So, looks like the query object is not retrievable. Any workarounds, plans to implement this? |