Генерация Enum на основе таблицы SQL (или наоборот)?

Я создаю простое веб-приложение, используя Flask, Flask-Security и Flask-SQLAlchemy и PostgreSQL. И у меня возникают трудности с представлением моих данных в Python.

Вот минимальная схема, которая представляет мои данные:

create table thing_types (
    id int generated always as identity primary key not null,
    name varchar not null,
    description varchar not null
);

create table things (
    id int generated always as identity primary key not null,
    thing_type int not null references thing_types (id),
    name varchar not null
);

Мои идеальные цели (в порядке важности):
* Не полагайтесь на строго пронумерованные типы, потому что разные экземпляры могут захотеть добавлять разные новые, а когда программное обеспечение обновляется, я не хочу иметь дело с массовыми миграциями.
* Легкий доступ к Enum-подобной структуре, чтобы получить быстрый доступ к идентификаторам и именам
* Избегайте запросов к базе данных, чтобы искать эти значения что-то вроде ThingType.query.filter(name="needed").one().id слишком расточительно, поэтому кэшируйте эти значения, когда экземпляр запускается pybabel как-то получить name а также description содержимое столбца при извлечении строк из кода
* Каким-то образом есть PyCharm автозаполнение имен

Как я сейчас делаю это:
* Я запрашиваю БД для всех строк типа и генерирую словарь, который позволяет искать идентификатор по имени.
* Обновление вручную pybabel строки, чтобы все было переведено
* Обновление Enum вручную для каждого экземпляра, обеспечивающего комфорт при разработке.

Как видите, мое "решение" работает только на один случай и очень громоздко.

Короче говоря, есть ли хороший способ синхронизировать содержимое конкретной таблицы PostgreSQL с Python Enum?

0 ответов

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