добре, има няколко начина да стигнете до това и това зависи от това как е структурирано вашето приложение. Ето най-основния начин:
meta = MetaData(schema="client1")
Ако начинът, по който работи приложението ви, е един "клиент" в даден момент в рамките на цялото приложение, сте готови.
Но това, което може да не е наред с това тук е, че всяка таблица от тези метаданни е в тази схема. Ако искате едно приложение да поддържа множество клиенти едновременно (обикновено това, което означава „многото клиент“), това би било тромаво, тъй като ще трябва да създадете копие на MetaData и да изпълните всички съпоставяния за всеки клиент. Този подход може да бъде направен, ако наистина искате, начинът, по който работи, е да получите достъп до всеки клиент с конкретен картографиран клас като:
client1_foo = Client1Foo()
и в този случай ще работите с рецептата за "име на обект" на http://www.sqlalchemy.org/trac/wiki/UsageRecipes/EntityName във връзка с sometable.tometadata()
(вижте http://docs.sqlalchemy.org/en/latest/core/metadata.html#sqlalchemy.schema.Table.tometadata).
Така че да кажем, че начинът, по който наистина работи, е множество клиенти в приложението, но само един по един на нишка. Всъщност най-лесният начин да направите това в Postgresql би бил да зададете пътя за търсене, когато започнете да работите с връзка:
# 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()
Последният подход би бил да се отмени компилаторът, като се използва разширението @compiles, за да се постави името на "схема" в изразите. Това е изпълнимо, но би било трудно, тъй като няма последователна кука за навсякъде, където се генерира "Таблица". Най-добрият ви залог вероятно е да зададете пътя за търсене за всяка заявка.