I understand. Excuse me, drown in work. Going to test your code in a couple of days.
вт, 13 февр. 2018 г., 20:32 Mike Bayer <[email protected]>: > i don't plan to move on this until I get feedback. > > On Tue, Feb 6, 2018 at 7:32 PM, Mike Bayer <[email protected]> > wrote: > > 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 <[email protected]> > wrote: > >> On Tue, Feb 6, 2018 at 5:09 PM, Антонио Антуан <[email protected]> > 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 [email protected]. > >>> To post to this group, send email to [email protected]. > >>> 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 [email protected]. > To post to this group, send email to [email protected]. > 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 [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.
