Python SQLAlchemy ORM - отражение таблицы * без * ограничения и отражения индекса - PullRequest
0 голосов
/ 01 октября 2018

Я хотел бы использовать SQLAlchemy ORM для отражения (называемых в документах «Отражение объектов базы данных») нескольких таблиц.Все, что меня интересует, это отражение таблицы DDL, а не индекса или ограничений - но это поведение по умолчанию.

Есть ли способ отключить видимое отражение индекса и ограничения по умолчанию?

Вот что я делаю:

from sqlalchemy import and_, create_engine, MetaData, Table
from sqlalchemy.orm import sessionmaker

conn_str = f'oracle://{user}:{pswd}@{srvc}'
engine =  create_engine(conn_str, echo=True)
Session = sessionmaker(bind=engine)
meta = MetaData()

my_table = Table('my_table', meta, autoload=True, autoload_with=engine, 
                 schema='my_schema')

При включенном echo=True яЯсно вижу, что связанные Индекс и Ограничения отражаются за кулисами.Я не хочу, чтобы это делалось с учетом ненужных вызовов базы данных и накладных расходов, которые это накладывает на мое приложение.Как отключить отражение индекса и ограничения?

Спасибо.

1 Ответ

0 голосов
/ 10 октября 2018

Кажется, что нет очевидного способа ограничить то, что происходит под прикрытием при отражении объекта базы данных, поэтому я обнаружил, что лучший и наиболее эффективный способ обойти это - просто явно определить сопоставленные классы, как описано в документации., только включая необходимые вам столбцы, в отличие от всего.

Base = declarative_base()

class Person(Base):
    __tablename__ = 'person'
    __table_args__ = {'schema': 'schema_name'}

    person_id = Column(Integer, primary_key=True)
    first_name = Column(String)
    last_name = Column(String)

И тогда запрос может быть выполнен с использованием того же синтаксиса session.query(), который будет использоваться с отражением базы данныхно избавляет вас от значительных накладных расходов при переходе к таблицам словаря базы данных.

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