I thought about wrapping create_all this way:

def create_tables(database, schema=None):
    for table in Base.metadata.tables.values():
        table.schema = schema
    Base.metadata.create_all(database.engine)

and then probably use the event for all the queries afterwards. Is this too 
much of a nasty way of doing it?

On Thursday, March 12, 2015 at 6:29:00 PM UTC+1, Michael Bayer wrote:
>
>
>
> Francesco Della Vedova <francesco....@rocket-internet.de <javascript:>> 
> wrote: 
>
> > Hello, 
> > 
> > I have a set of models that I would like to replicate on different 
> Postgres schemas. The name of the schema is only known at runtime. 
> > Just as an example, imagine I have a bunch of tables of customer data, 
> and I want to create a schema 'customer_id' with the same tables every time 
> I get a new customer. 
> > 
> > I'm aware of this strategy but it wouldn't work in my case. 
> > 
> > class TableA(Base): 
> >    ... 
> > 
> > class TableB(Base): 
> >    ... 
> > 
> > for customer_id in customers: 
> >    # set the schema here 
> >    Base.metadata.create_all() 
>
> you can try using table.tometadata(new_metadata, schema=<my schema>) to 
> make 
> new tables, and possibly even use it in conjunction with automap 
> (http://docs.sqlalchemy.org/en/rel_0_9/orm/extensions/automap.html). 
>
> Another approach is to use a before_cursor_execute() event, searching for 
> a 
> <schema> token in the SQL and rewriting it to one that is set up on the 
> current connection in the .info dictionary. 
>
> The latter is essentially a hacky way to get at an upcoming feature which 
> is 
>
> https://bitbucket.org/zzzeek/sqlalchemy/issue/2685/default-schema-schema-translation-map-as.
>  
>
>
> This depends of course on if you need to use each schema on a 
> per-Session/connection basis, or you need to work with all schema-based 
> models simultaneously. 
>
>
> > -- 
> > 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 http://groups.google.com/group/sqlalchemy. 
> > For more options, visit https://groups.google.com/d/optout. 
>

-- 
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 http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to