Получить классы с табличным именем sqlalchemy

У меня есть файл EE_log_declarative.py со всеми объявленными классами, сгенерированными sqlacodegen engine --outfile declarative_model.py, который выглядит как ниже, который импортирует также все типы данных как классы, такие как BigInteger, Boolean, ForeignKey, String,...

from sqlalchemy import BigInteger, Boolean, ForeignKey, String

Base = declarative_base()
metadata = Base.metadata

class DataProvider(Base):
    __tablename__ = 'data_provider'
    ...

class DatePattern(Base):
    __tablename__ = 'date_pattern'
    ...

Мой вопрос: как мне получить только те классы, с которыми связано имя таблицы?

Чтобы получить объект класса в одном определении класса, в настоящее время я делаю, и это работает:

EE_log_declarative.Base.metadata.bind = engine
DBSession = sessionmaker()
DBSession.bind = engine
session = DBSession()

data_provider_account_object =session.query(EE_log_declarative.DataProvider).all()
date_pattern_object = session.query(EE_log_declarative.DatePattern).all()

Идея состоит в том, чтобы получить объекты класса динамически, столько классов, сколько будет у декларативного, но только построить объекты класса, которые имеют имя таблицы.

for x in dir(EE_log_declarative):
        attributes = getattr(EE_log_declarative, x)
        is_class = isclass(attributes)
        if is_class:
            try:
                object = session.query(EE_log_declarative, x).all()
                all_class.append(object)
            except:
                pass

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

0 ответов

Другие вопросы по тегам