Cuối cùng đã tìm ra giải pháp cho vấn đề này.
Về cơ bản, tôi không tạo các lớp mới cho mỗi cơ sở dữ liệu, tôi chỉ sử dụng các kết nối cơ sở dữ liệu khác nhau cho mỗi lớp.
Phương pháp này tự nó khá phổ biến, phần khó khăn (mà tôi không thể tìm thấy ví dụ về) là xử lý sự khác biệt về lược đồ. Tôi đã kết thúc việc này:
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
Session = sessionmaker()
class ContentProvider():
db = None
connection = None
session = None
def __init__(self, center):
if center == A:
self.db = create_engine('postgresql://%(user)s:%(pw)[email protected]%(host)s:%(port)s/%(db)s' % POSTGRES_A, echo=echo, pool_threadlocal=True)
self.connection = self.db.connect()
# It's not very clean, but this was the extra step. You could also set specific connection params if you have multiple schemas
self.connection.execute('set search_path=A_schema')
elif center == B:
self.db = create_engine('postgresql://%(user)s:%(pw)[email protected]%(host)s:%(port)s/%(db)s' % POSTGRES_B, echo=echo, pool_threadlocal=True)
self.connection = self.db.connect()
self.connection.execute('set search_path=B_schema')
def get_fra_list(self):
logging.debug("Fetching fra list")
fra_list = self.session.query(FRARecord.fra_code)
return fra_list