no, existuje několik způsobů, jak na to jít, a záleží na tom, jak je vaše aplikace strukturována. Zde je nejzákladnější způsob:
meta = MetaData(schema="client1")
Pokud je způsob, jakým vaše aplikace běží, je v rámci celé aplikace vždy jeden „klient“, jste hotovi.
Ale co na tom může být špatně, je to, že každá tabulka z těchto metadat je v tomto schématu. Pokud chcete, aby jedna aplikace podporovala více klientů současně (obvykle to, co znamená „multitenant“), bylo by to nepraktické, protože byste museli vytvořit kopii MetaDat a vymazat všechna mapování pro každého klienta. Tento přístup lze provést, pokud opravdu chcete, funguje to tak, že ke každému klientovi přistupujete s konkrétní mapovanou třídou, jako je:
client1_foo = Client1Foo()
a v tom případě byste pracovali s receptem "název entity" na http://www.sqlalchemy.org/trac/wiki/UsageRecipes/EntityName ve spojení s sometable.tometadata()
(viz http://docs.sqlalchemy.org/en/latest/core/metadata.html#sqlalchemy.schema.Table.tometadata).
Řekněme tedy, že způsob, jakým to skutečně funguje, je více klientů v rámci aplikace, ale pouze jeden po druhém na vlákno. No vlastně, nejjednodušší způsob, jak to udělat v Postgresql, by bylo nastavit vyhledávací cestu, když začnete pracovat s připojením:
# start request
# new session
sess = Session()
# set the search path
sess.execute("SET search_path TO client1")
# do stuff with session
# close it. if you're using connection pooling, the
# search path is still set up there, so you might want to
# revert it first
sess.close()
Posledním přístupem by bylo přepsat kompilátor pomocí rozšíření @compiles, aby se do příkazů vložil název "schéma". To je proveditelné, ale bylo by to složité, protože neexistuje konzistentní háček pro všude, kde se generuje "Tabulka". Nejlepším řešením je pravděpodobně nastavení vyhledávací cesty pro každý požadavek.