I understand. Excuse me, drown in work. Going to test your code in a couple
of days.

вт, 13 февр. 2018 г., 20:32 Mike Bayer <mike...@zzzcomputing.com>:

> i don't plan to move on this until I get feedback.
>
> On Tue, Feb 6, 2018 at 7:32 PM, Mike Bayer <mike...@zzzcomputing.com>
> 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 <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.
>


-- 

Антон

-- 
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.

Reply via email to