cũng có một số cách để thực hiện điều này và nó phụ thuộc vào cách ứng dụng của bạn được cấu trúc. Đây là cách cơ bản nhất:
meta = MetaData(schema="client1")
Nếu cách ứng dụng của bạn chạy là một "ứng dụng khách" tại một thời điểm trong toàn bộ ứng dụng, thì bạn đã hoàn tất.
Nhưng điều có thể sai với điều đó ở đây là, mọi Bảng từ Siêu dữ liệu đó đều nằm trên lược đồ đó. Nếu bạn muốn một ứng dụng hỗ trợ nhiều máy khách đồng thời (thường là "multitenant" có nghĩa là gì), điều này sẽ khó sử dụng vì bạn cần tạo một bản sao của MetaData và sử dụng tất cả các ánh xạ cho mỗi máy khách. Cách tiếp cận này có thể được thực hiện, nếu bạn thực sự muốn, cách nó hoạt động là bạn truy cập vào từng khách hàng bằng một lớp được ánh xạ cụ thể như:
client1_foo = Client1Foo()
và trong trường hợp đó, bạn sẽ làm việc với công thức "tên thực thể" tại http://www.sqlalchemy.org/trac/wiki/UsageRecipes/EntityName kết hợp với sometable.tometadata()
(xem http://docs.sqlalchemy.org/en/latest/core/metadata.html#sqlalchemy.schema.Table.tometadata).
Vì vậy, giả sử cách nó thực sự hoạt động là nhiều ứng dụng khách trong ứng dụng, nhưng chỉ một ứng dụng tại một thời điểm trên mỗi luồng. Thực ra, cách dễ nhất để làm điều đó trong Postgresql là đặt đường dẫn tìm kiếm khi bạn bắt đầu làm việc với một kết nối:
# 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()
Cách tiếp cận cuối cùng sẽ là ghi đè trình biên dịch bằng cách sử dụng phần mở rộng @compiles để gắn tên "lược đồ" vào bên trong các câu lệnh. Điều này có thể làm được, nhưng sẽ rất phức tạp vì không có một móc nối nhất quán cho mọi nơi "Bảng" được tạo. Đặt cược tốt nhất của bạn có lẽ là đặt đường dẫn tìm kiếm theo từng yêu cầu.