I've updated the documentation and in a few hours it should be up at
https://docs.sqlalchemy.org/en/latest/orm/persistence_techniques.html#simple-vertical-partitioning
On Tue, Nov 6, 2018 at 3:04 PM <yoch.me...@gmail.com> wrote:
>
> Oh, it's perfect for me if I can use bases for bindings.
>
> Thank you
>
> Le mardi 6 novembre 2018 21:27:19 UTC+2, Mike Bayer a écrit :
>>
>> On Tue, Nov 6, 2018 at 2:20 PM <yoch....@gmail.com> wrote:
>> >
>> > I have many classes, so it's seems a better idea to use something like 
>> > that (but I don't know what exactly is this registry, and why it's a 
>> > WeakRef dict) :
>> >
>> > binding = {cls: engine for cls in Base._decl_class_registry.values()}
>>
>>
>> see I don't want you to use that because it's a private variable.  You
>> should make your own "registry" as you do the automap.
>>
>>
>> >
>> > If not, maybe I can use the second approach, overloading Session, but is 
>> > this safe ?
>> >
>> > class BindSession(Session):
>> >     def get_bind(self, mapper=None, clause=None):
>> >         if mapper:
>> >             if issubclass(mapper.class_, SomeBase):
>> >                 return some_engine
>> >             elif issubclass(mapper.class_, OtherBase):
>> >                 return other_engine
>>
>> oh is it based on two different bases?   Guess what, you can use those
>> base classes:
>>
>> session = Session(binds={SomeBase: engine1, OtherBase: engine2})
>>
>> docs seem to not be in-depth enough or adequately cross-linked, will fix
>>
>>
>>
>> >        # correct ?
>> >        return super().get_bind(mapper,clause)
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> > Le mardi 6 novembre 2018 18:07:48 UTC+2, Mike Bayer a écrit :
>> >>
>> >> On Tue, Nov 6, 2018 at 9:41 AM <yoch....@gmail.com> wrote:
>> >> >
>> >> > Hi,
>> >> >
>> >> > I'm using a schema with multiple DB, like :
>> >> >
>> >> > engine1 = 
>> >> > create_engine("mysql://localhost/{db}?charset=utf8".format(db=db1))
>> >> > engine2 = 
>> >> > create_engine("mysql://localhost/{db}?charset=utf8".format(db=db2))
>> >> >
>> >> > Then I use automap and reflection to generate mapping of all classes 
>> >> > needed.
>> >> >
>> >> > Sometime, I want to use classes from both databases, but I cannot bind 
>> >> > my session directly with two engines.
>> >> >
>> >> > I noticed that I can use the Session `binds` argument to decide which 
>> >> > class to bind to some engine, but I have many classes to include here, 
>> >> > and this is somewhat error prone.
>> >> >
>> >> > Is there any solution to automate the binding definition against each 
>> >> > class ? Or to bind a session directly to multiple engines ?
>> >>
>> >> you would use the "binds" argument as you saw in
>> >> https://docs.sqlalchemy.org/en/latest/orm/session_api.html#sqlalchemy.orm.session.Session.params.binds.
>> >>
>> >> as you noticed though, you have to tell the Session which classes map
>> >> to which engine.   So when you use automap, each time you reflect()
>> >> for a particular engine, you need to gather all the classes that were
>> >> generated for that call and add them to a dictionary, which you can
>> >> then pass to session.binds.
>> >>
>> >> If you have some totally other way to tell the Session, given a class,
>> >> which engine to use, you can also make your own method to do whatever
>> >> you want and override it, by overriding get_bind:
>> >> https://docs.sqlalchemy.org/en/latest/orm/session_api.html#sqlalchemy.orm.session.Session.get_bind
>> >> .    you probably don't need to do it this way but there's an example
>> >> of how that looks at
>> >> http://techspot.zzzeek.org/2012/01/11/django-style-database-routers-in-sqlalchemy/.
>> >>
>> >>
>> >>
>> >> >
>> >> > Thank you
>> >> >
>> >> >
>> >> > --
>> >> > 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+...@googlegroups.com.
>> >> > To post to this group, send email to sqlal...@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+...@googlegroups.com.
>> > To post to this group, send email to sqlal...@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