code review at https://gerrit.sqlalchemy.org/#/c/zzzeek/sqlalchemy/+/656 and ideally would include basic ShardedQuery support
On Tue, Feb 6, 2018 at 7:23 PM, Mike Bayer <mike...@zzzcomputing.com> wrote: > On Tue, Feb 6, 2018 at 5:09 PM, Антонио Антуан <a.ch....@gmail.com> wrote: >> Hello Mike! >> First of all, thank you for your help with this problem. Me and my crew >> appreciate it. >> >> >> I have a question in case of `identity_token` for `update` and `delete` >> methods of `Query` instances. >> >> If we take a look on sqlalchemy.orm.persistence.BulkDelete._do_exec, we see, >> that there is no additonal kwargs passed to `execute` method. So I don't see >> any way to pass additional kwargs to Session.get_bind. Here is code of 1.0 >> version: >> >> def _do_exec(self): >> delete_stmt = sql.delete(self.primary_table, >> self.context.whereclause) >> >> self.result = self.query.session.execute( >> delete_stmt, >> params=self.query._params, >> mapper=self.mapper, >> # need to pass here additional kwargs >> ) >> self.rowcount = self.result.rowcount >> >> Code from master branch (almost the same): >> >> def _execute_stmt(self, stmt): >> self.result = self.query.session.execute( >> stmt, params=self.query._params, >> mapper=self.mapper) >> self.rowcount = self.result.rowcount >> >> >> >> >> As you may remember, I have some kind of `CustomQuery` with `set_bind` >> method (like the same into sqlalchemy.ext.horizontal_shard.ShardedQuery). So >> I have `_bind_id` attribute within instances of that class. >> My question is: Is there any way to pass `self.query._bind_id` to >> `self.query.session.execute` (see above)? > > for bulk operations to work with sharding it would need to be able to > emit the UPDATE or DELETE statement across multiple shards and work in > a similar way to ShardedQuery._execute_and_instances, giving it the > chance to consult with query_chooser. > > can you please see if you can work with this? thanks > > diff --git a/lib/sqlalchemy/orm/persistence.py > b/lib/sqlalchemy/orm/persistence.py > index dc0ae1c38..6c55dee92 100644 > --- a/lib/sqlalchemy/orm/persistence.py > +++ b/lib/sqlalchemy/orm/persistence.py > @@ -1327,9 +1327,8 @@ class BulkUD(object): > self._do_post() > > def _execute_stmt(self, stmt): > - self.result = self.query.session.execute( > - stmt, params=self.query._params, > - mapper=self.mapper) > + self.result = self.query._execute_crud(stmt, self.mapper) > + > self.rowcount = self.result.rowcount > > @util.dependencies("sqlalchemy.orm.query") > diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py > index 4f7b22cc9..91adfb79d 100644 > --- a/lib/sqlalchemy/orm/query.py > +++ b/lib/sqlalchemy/orm/query.py > @@ -2901,6 +2901,12 @@ class Query(object): > result = conn.execute(querycontext.statement, self._params) > return loading.instances(querycontext.query, result, querycontext) > > + def _execute_crud(self, stmt, mapper): > + conn = self._connection_from_session( > + mapper=mapper, clause=stmt, close_with_result=True) > + > + return conn.execute(stmt, self._params) > + > def _get_bind_args(self, querycontext, fn, **kw): > return fn( > mapper=self._bind_mapper(), > > > > > > >> >> -- >> SQLAlchemy - >> The Python SQL Toolkit and Object Relational Mapper >> >> http://www.sqlalchemy.org/ >> >> To post example code, please provide an MCVE: Minimal, Complete, and >> Verifiable Example. See http://stackoverflow.com/help/mcve for a full >> description. >> --- >> You received this message because you are subscribed to the Google Groups >> "sqlalchemy" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to sqlalchemy+unsubscr...@googlegroups.com. >> To post to this group, send email to sqlalchemy@googlegroups.com. >> Visit this group at https://groups.google.com/group/sqlalchemy. >> For more options, visit https://groups.google.com/d/optout. -- SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper http://www.sqlalchemy.org/ To post example code, please provide an MCVE: Minimal, Complete, and Verifiable Example. See http://stackoverflow.com/help/mcve for a full description. --- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.