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()}

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
       # 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 <javascript:>> 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 <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