@pcdesign

Почему sqlacodegen генерирует для одних Mysql таблиц в виде class-ов, а для других таблиц в виде Tables?

Есть модуль sqlacodegen
https://pypi.python.org/pypi/sqlacodegen/1.1.4
Который генерирует код для дальнейшего использования в SQLAlchemy.

Некоторые таблицы, он генерит вот в таком виде:

class User(Base):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128))


А некоторые таблицы в таком виде:

t_users_forum = Table(
    'users_forum', metadata,
    Column('id', Integer, nullable=False),
    Column('login', String(25), nullable=False),
)


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

P.S.: Пытался прочитать исходный код:
https://bitbucket.org/agronholm/sqlacodegen/src/99...
Но, что-то без поллитра вникнуть в логику не могу.
  • Вопрос задан
  • 2858 просмотров
Решения вопроса 2
Строки 532-537
# Only form model classes for tables that have a primary key and are not association tables
            if not table.primary_key or table.name in association_tables:
                model = ModelTable(table)
            else:
                model = ModelClass(table, links[table.name], inflect_engine, not nojoined)
                classes[model.name] = model

из-за первичного ключа.
И как сделать так, чтобы любая таблица из MySQL генерилась в виде классов?

соответственно добавить первичные ключи.
Ответ написан
qmax
@qmax
программер
if not table.primary_key or table.name in association_tables:
    model = ModelTable(table)
else:
    model = ModelClass(table, links[table.name], inflect_engine, not nojoined)


Если у таблицы нет определён primary_key, или если она "associated"

"associated" - это # Link tables have exactly two foreign key constraints and all columns are involved in them тоесть реализует связь N:M
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 03:54
1500 руб./за проект
22 нояб. 2024, в 02:56
10000 руб./за проект
22 нояб. 2024, в 00:55
500 руб./за проект