В последнее время я много занимаюсь исследованиями использования Pyramid с SQLAlchemy и хранением текущего приложения в Django. Это само по себе является целым дебатом, но я не здесь, чтобы обсудить это.
Я хочу знать, почему SQLAlchemy универсально считается лучшим, чем Django ORM? Почти каждое, если не каждое, сравнение, которое я нашел между двумя вариантами SQLAlchemy. Я предполагаю, что производительность является большой, так как структура SQLAlchemy позволяет ему переводить на SQL гораздо более плавно.
Но я также слышал, что с более сложными задачами Django ORM практически невозможно использовать. Я хочу рассказать о том, насколько огромна проблема. Я читал одну из причин, чтобы переключиться на SQLAlchemy, когда Django ORM больше не подходит вашим потребностям.
Итак, вкратце, может ли кто-нибудь предоставить запрос (не обязательно быть синтаксисом SQL), который может выполнять SQLAlchemy, но Django ORM не может обойтись без добавления дополнительного raw SQL?
Обновление
Я замечал этот вопрос, уделяя довольно много внимания, так как я сначала спросил, поэтому я хотел бы добавить свои дополнительные два цента.
В итоге мы закончили использование SQLAlchemy, и я должен сказать, что я доволен решением.
Я пересматриваю этот вопрос, чтобы предоставить дополнительную функцию SQLAlchemy, которая до сих пор не смогла реплицироваться в Django ORM. Если кто-то может дать пример того, как это сделать, я с удовольствием поеду с моими словами.
Предположим, вы хотите использовать некоторую функцию postgresql, такую как сходство(), которая обеспечивает нечеткое сравнение (см. Быстрый поиск похожих строк с PostgreSQL - tl; dr вводят две строки, возвращают процентное сходство).
Я сделал несколько поисков о том, как это сделать с помощью Django ORM, и не нашел ничего, кроме использования raw sql, как это видно из их документации: https://docs.djangoproject.com/en/dev/topics/db/sql/.
то есть.
Model.objects.raw('SELECT * FROM app_model ORDER BY \
similarity(name, %s) DESC;', [input_name])
SQLalchemy, однако, имеет func(), как описано здесь: http://docs.sqlalchemy.org/en/latest/core/sqlelement.html#sqlalchemy.sql.expression.func
from sqlalchemy import desc, func
session.query(Model).order_by(func.similarity(Model.name, input_name))
Это позволяет вам сгенерировать sql для любой определенной функции sql/postgresql/etc и не требовать сырой sql.