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 <javascript:>> 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 <javascript:>. 
> > To post to this group, send email to sqlal...@googlegroups.com 
> <javascript:>. 
> > 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