SQLAlchemy Рассмотрим варианты интеграции SQLAlchemy с textcase .
Автогенерация имени таблицы Обычно имя таблицы задаётся вручную:
base.py from sqlalchemy.orm import DeclarativeBase
class User ( DeclarativeBase ):
__tablename__ = "user"
Чтобы не дублировать __tablename__ в каждой модели, можно создать базовый класс:
textcase.py from typing import Any
from sqlalchemy.ext.declarative import declared_attr
from sqlalchemy.orm import DeclarativeBase
from textcase import snake
class Base ( DeclarativeBase ):
@declared_attr
@classmethod
def __tablename__ ( cls ) -> Any : # noqa: ANN401
return snake ( cls . __name__ )
class User ( Base ): ...
Если вы имеете в проекте Pydantic , то можно обойтись без этой библиотеки и применить pydantic.alias_generators.to_snake . Эта функция работает похожим образом и также обрабатывает сокращения , но весит больше.
pydantic.py from typing import Any
from pydantic.alias_generators import to_snake
from sqlalchemy.ext.declarative import declared_attr
from sqlalchemy.orm import DeclarativeBase
class Base ( DeclarativeBase ):
@declared_attr
@classmethod
def __tablename__ ( cls ) -> Any : # noqa: ANN401
return to_snake ( cls . __name__ )
class User ( Base ): ...
Используйте этот вариант, если Pydantic уже присутствует в проекте и вам нужен только этот сценарий. В остальных случаях предпочтительнее textcase из-за меньшего размера.
2026-07-15 2026-07-15 GitHub