Вот есть проект sqlalchemy. Люди стараются, пишут абстракции, что бы работать с SQL, как с объектами. Со стороны выглядит красиво.
Но начинаешь использовать банальные варианты: sqlite для локальных тестов, postgresql для реального сервера. Казалось бы: весь код написан на абстрактных объектах и мы просто поменяет URI базы данных и... нет, оказывается это так не работает:
- работа с датой/временем - разные функции
- хочешь
ON CONFLICT при вставке - разные реализации в разных диалектах - хочешь нормальное
JSON поле - не забудь сделать код, который использует тип JSONB для postgresql
И так далее. Думаешь: ОК, наверное я просто что-то не понимаю в современной библиотеке...
Ага, вот как раз под руку попалась реализация хранилища объектов в БД на основе sqlalchemy в библиотеке adk от гугла. И весь тот же самый закат солнца вручную:
$ grep dialect google/adk/sessions/database_session_service.py | grep '"'
if dialect.name == "postgresql":
if dialect.name == "mysql":
if dialect.name == "postgresql":
if dialect.name == "postgresql":
if dialect.name == "mysql":
if self._dialect_name == "sqlite":