Короткий ответ: нет, вы не можете использовать Django ORM отдельно от Django.
Длинный ответ таков: да, вы можете, если хотите загружать большие части Django вместе с ним. Например, соединение с базой данных, используемое Django, открывается, когда происходит запрос к Django. Это происходит при отправке сигнала, чтобы вы могли якобы отправить этот сигнал, чтобы открыть соединение, не используя специальный механизм запроса. Также вам необходимо настроить различные приложения и настройки для проекта Django.
В конечном счете, это, вероятно, не стоит вашего времени. SQL Alchemy - это относительно хорошо известный Python ORM, который на самом деле более мощный, чем Django, так как он поддерживает несколько соединений с базой данных, пул соединений и другие полезные вещи.
Редактировать: в ответ на критику Джеймса в другом месте, я поясню, что я описал в моем первоначальном посте. Хотя отрадно, что меня вызвал крупный автор Django, я все же думаю, что я прав:)
Прежде всего, подумайте, что нужно сделать, чтобы использовать ORM Джанго отдельно от любой другой части. Вы используете один из методов , описанных Джеймсом, для выполнения базовой настройки Django. Но некоторые из этих методов не позволяют использовать команду syncdb
, которая требуется для создания таблиц для ваших моделей. Для этого необходим файл settings.py с переменными не только для DATABASE_*
, но и INSTALLED_APPLICATIONS
с правильными путями ко всем файлам models.py.
Можно использовать собственное решение для использования syncdb
без файла settings.py, но для этого требуются некоторые дополнительные знания Django. Конечно, вам не нужно использовать syncdb
; таблицы могут быть созданы независимо от моделей. Но это аспект ORM, который недоступен, пока вы не приложите некоторые усилия к настройке.
Во-вторых, подумайте, как вы будете создавать свои запросы к БД с помощью стандартного вызова Model.objects.filter()
. Если это сделано как часть представления, это очень просто: создайте QuerySet
и просмотрите экземпляры. Например:
tag_query = Tag.objects.filter( name='stackoverflow' )
if( tag_query.count() > 0 ):
tag = tag_query[0]
tag.name = 'stackoverflowed'
tag.save()
Красиво, просто и чисто. Теперь без поддержки системы цепочки запросов / ответов Django вам нужно инициализировать соединение с базой данных, выполнить запрос, а затем закрыть соединение. Таким образом, приведенный выше пример становится:
from django.db import reset_queries, close_connection, _rollback_on_exception
reset_queries()
try:
tag_query = Tag.objects.filter( name='stackoverflow' )
if( tag_query.count() > 0 ):
tag = tag_query[0]
tag.name = 'stackoverflowed'
tag.save()
except:
_rollback_on_exception()
finally:
close_connection()
Управление подключением к базе данных также может осуществляться через сигналы Django. Все вышеперечисленное определено в django / db / init .py . Другие ORM также имеют такого рода управление соединениями, но вам не нужно копаться в их источнике, чтобы узнать, как это сделать. Система управления соединениями в SQL Alchemy описана в руководствах и других.
Наконец, вам нужно помнить, что объект подключения к базе данных всегда является локальным по отношению к текущему потоку, что может ограничивать или не ограничивать вас в зависимости от ваших требований. Если ваше приложение не имеет состояния, например Django, но постоянно, вы можете столкнуться с проблемами многопоточности.
В заключение, это вопрос мнения. На мой взгляд, как ограничения, так и настройки, необходимые для ORM Django отдельно от фреймворка, являются слишком большой ответственностью. В другом месте существуют совершенно жизнеспособные специализированные решения ORM, предназначенные для использования в библиотеках. Джанго нет.
Не думайте, что во всех вышеперечисленных шоу мне не нравится Django и все его работы, мне действительно очень нравится Django! Но я реалистично оцениваю ее возможности, и быть библиотекой ORM не входит в их число.
P.S. Поддержка нескольких соединений с базой данных работает . Но сейчас его там нет.