Генерация 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?