Можно ли привязать сеанс к определенной схеме в SQLAlchemy? - PullRequest
0 голосов
/ 06 ноября 2019

Я работаю с базой данных postgres, которая имеет несколько (похожих) схем. В моей кодовой базе я отражаю различные схемы в отдельных schema_xy.py файлах. У меня также есть файл base.py, который содержит базовый класс с определениями абстрактных таблиц для таблиц, представленных в нескольких схемах.

Мой base.py файл:

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine('postgresql+psycopg2://dbuser@dbhost:5432/dbname')

Base = declarative_base(bind=engine)

class User(Base):
    __abstract__ = True

    id = ..

Ипример файла Schema1.py, который наследует таблицу User от базы, но также содержит таблицу, специфичную для схемы S1Table:

from sqlalchemy import declarative_base
from .base import User

engine = create_engine('postgresql+psycopg2://dbuser@dbhost:5432/dbname')
Schema1Base = declarative_base(bind=engine, metadata=MetaData(schema='Schema1'))

class User(Schema1Base, User):
    __tablename__ = "user"

class S1Table(Schema1Base):
    __tablename__ = "s1table"

    foo = ...

Мой вопрос заключается в том, как лучше всего создавать экземпляры сеансов для запроса и загрузки данных, которые «привязаны» к определенной схеме, т.е. как мне убедиться, что я запрашиваю / манипулирую таблицей User из правильной схемы?

Я нашел этот пост в блоге

http://www.blog.pythonlibrary.org/2010/09/10/sqlalchemy-connecting-to-pre-existing-databases/

, который определяет loadSession функцию для Base следующим образом:

def loadSession():

    metadata = Base.metadata
    Session = sessionmaker(bind=engine)
    session = Session()
    return session

Но я не понимаю, что именно неиспользованный metadata должен делать здесь точно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...