PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Hỗ trợ SQLAlchemy của các lược đồ Postgres

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Danh sách kiểm tra tuân thủ SOx cho PostgreSQL

  2. cập nhật truy vấn với phép nối trên hai bảng

  3. Tổng quan về các phương thức JOIN trong PostgreSQL

  4. PostgreSQL LIKE các biến thể hiệu suất truy vấn

  5. Số lần lặp lại / trùng lặp có thứ tự