Sqlalchemy для выполнения сложных запросов в проекте Django - PullRequest
2 голосов
/ 20 июня 2011

Каков наилучший вариант использования sqlalchemy для выполнения сложных запросов в проекте Django?Я нашел спокойной, но это не похоже на проект с большим количеством пользователей ... Любые предложения?

Причина: у меня есть 30-40 RawQueries на проект, и обслуживание этих запросов является болезненным ... Я думаю, что SQLAlchemyможет обеспечить гораздо лучший опыт в этом случае.

ОБНОВЛЕНИЕ.

Основная цель, которую нужно достичь, - написать один большой сложный запрос один раз и уточнить его позже, когда мне потребуется:

q = get_big_complex_sqlalachemy_query()
mine = q.filter_by(table.c.created_by_id=1)
closed = q.filter_by(table.c.is_closed=True)

Самая большая проблема с Django и SQLAlchemy - управление транзакциями.Если вы используете большие транзакции (одна транзакция на запрос), SQLAlchemy не увидит никаких изменений, пока вы их не зафиксируете (счастливая отладка :).Поэтому я написал собственный пул соединений для SQLAlchemy, чтобы использовать соединение Django.Это тоже не идеально (сейчас есть проблемы в тестах, потому что SQLAlchemy любит оборачивать каждый выбор в транзакции, а я до сих пор не знаю, как это отключить), но выглядит лучше.

1 Ответ

1 голос
/ 31 июля 2011

Хотя я не знаком со спокойным, я могу сказать, что способ использовать sqlalchemy в django - это использовать sqlalchemy ... в django!

Когда я использовал sqlalchemy в проектах django в прошлом, я обычно считывал данные из внешних источников данных (вещи, не управляемые django ORM). Имея это в виду, я склонен использовать расширение SqlSoup , которое не требует от вас явного объявления структуры ваших данных. Это может быть полезно и для вас, так как я предполагаю, что вы не хотите писать все свои модели дважды в 2 разных ORM.

Еще один совет: если вам не нужна sqlalchemy для каждого просмотра, не открывайте соединение в вашем модуле настроек. Поместите свой sqlalchemy код (включая создание соединения) в его собственный модуль или пакет - держите его как можно более изолированным. Импортируйте модуль и создавайте соединение только тогда, когда оно вам действительно нужно.

Все это зависит от вашей цели. Ваши запросы в основном читаются, или вы тоже хотите написать? Я действительно не понимаю, что вы пытаетесь сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...