Только Используя часть DB Django

Теперь вы можете использовать java 8:

Collections.addAll(list, arr);
Collections.shuffle(list);
cardsList.toArray(arr);
40
задан M. Elkstein 24 February 2009 в 07:45
поделиться

5 ответов

Короткий ответ: нет, Вы не можете использовать Django ORM отдельно от Django.

длинный ответ: да, Вы можете, если Вы готовы загрузить значительные части Django наряду с ним. Например, соединение с базой данных, которое используется Django, открыто, когда запрос Django происходит. Это происходит, когда сигнал отправляется так, Вы могли якобы отправить этот сигнал открыть соединение, не используя определенный механизм запроса. Кроме того, необходимо было бы установить различные приложения и настройки для проекта Django.

В конечном счете, это, вероятно, не стоит Вашего времени. Алхимией SQL является относительно известный Python ORM, который на самом деле более мощен, чем Django так или иначе, так как это поддерживает несколько соединений с базой данных и организации пула подключений и другой хороший материал.

<час>

Редактирование: в ответ на критику James в другом месте, я разъясню то, что я описал в своем исходном сообщении. В то время как приятно, что участник майора Django вызвал меня, я все еще думаю, что я прав :)

Прежде всего, рассматриваю, какие потребности быть сделанным для использования ORM Django разделяют от любой другой части. Вы используете один из эти методы описанный James для того, чтобы сделать основную установку Django. Но много этих методов не допускают использование эти syncdb команда, которая требуется, чтобы составлять таблицы для Ваших моделей. settings.py файл необходим для этого с переменными не только для DATABASE_*, но также и INSTALLED_APPLICATIONS с корректными путями ко всем models.py файлам.

Это возможно к решению для самокрутки использовать syncdb без settings.py, но требуется некоторое усовершенствованное знание Django. Конечно, Вы не должны использовать syncdb; таблицы могут быть составлены независимо от моделей. Но это - аспект ORM, который не доступен, если Вы не прикладываете некоторые усилия к установке.

, Во-вторых, рассмотрите, как Вы создали бы свои запросы к DB со стандартом 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. Все вышеупомянутое определяется в [1 111] django/db / init.py. Другие ORMs также имеют этот вид управления соединениями, но Вы не должны рыть в их источник, чтобы узнать, как сделать это. Система управления соединениями Алхимии SQL документируется в эти учебные руководства и в другом месте.

Наконец, необходимо иметь в виду, что объект соединения с базой данных локален для текущего потока в любом случае, который может или не может ограничить Вас в зависимости от Ваших требований. Если Ваше приложение не является не сохраняющим состояние, как Django, но персистентным, можно поразить проблемы поточной обработки.

В заключение это - дело вкуса. По-моему, и ограничения и установка, требуемая для, ORM Django, отдельный от платформы, являются слишком большой ответственности. Там совершенно жизнеспособны, выделил решения ORM, доступные в другом месте, которые разработаны для использования библиотеки. Django не.

не думают, что все вышеупомянутые шоу, мне не нравятся Django и все, которое это - работы, мне действительно нравится Django много! Но я реалистичен относительно того, что это - возможности, и быть библиотекой ORM не один из них.

P.S. Несколько поддержка соединения с базой данных работавшие на. Но это не там теперь.

13
ответ дан Shane Breatnach 4 August 2019 в 22:16
поделиться

Можно, конечно, использовать различные части Django автономным способом. Это - в конце концов, просто набор модулей Python, которые можно импортировать к любому другому коду, требуется использовать их.

я также рекомендовал бы смотреть Алхимия SQL , если Вы только после стороны ORM вещей.

9
ответ дан Andy Hume 4 August 2019 в 22:16
поделиться

Я рекомендую SQLAlchemy. Это должно сделать весь материал ORM, а также основной материал SQL.

4
ответ дан ryeguy 4 August 2019 в 22:16
поделиться

Если Вам нравится ORM Django, он отлично прост в использовании это "автономный"; я имею описанный несколько методов для использования частей Django за пределами веб-контекста , и Вы свободны использовать любого из них (или самокрутка).

Shane выше, кажется, немного дезинформирован на этом и нескольких других точках - например, Django может делать несколько различных баз данных, он просто не делает значение по умолчанию к тому (необходимо сделать пользовательского менеджера на моделях, которые используют что-то другое, чем "основной" DB, что-то, что это не слишком твердо и существуют рецепты, плавающие вокруг для него). Это верно, что Django само не делает управления соединениями / организация пула подключений, но лично я всегда использовал внешние инструменты для того так или иначе (например, pgpool, который качается тяжелее, чем что-нибудь встроило к ORM, когда-либо мог).

я предложил бы провести некоторое время, читая и возможно пробуя несколько вероятных поисков Google (например, сообщение, которое я связал, Вы к предстаете как главный результат перед "автономным сценарием Django") получить ощущение того, что на самом деле лучше всего удовлетворит Вашим потребностям и вкусам - это может быть ORM Django, не является правильным для Вас, и Вы не должны использовать его, если это не, но к сожалению существует большая дезинформация там, которая пачкает воды.

Редактирование для ответа на Shane:

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

Что касается нескольких поддержка БД, Вы, кажется, смущены: поддержка там на низком уровне. Объект запроса - не QuerySet, но лежание в основе Query объект, который это выполнит, знает, какой DB это подключает с и принимает соединение с БД как один из его аргументов инициализации. Сообщение одной модели использовать один DB и другую модель для использования другого так же просто как установка одного метода на менеджере, который передает правильную информацию о соединении в Query. Правда, нет никакого высокоуровневого API для этого, но это не то же как "никакая поддержка" и не то же, поскольку "требует пользовательского кода" (если Вы не утверждали бы, что конфигурирование нескольких DBS явно в SQLAlchemy, потребовало, если Вы хотите несколько DBS, также "пользовательский код").

Что касается того, заканчиваете ли Вы косвенно вещи использования, которые не находятся в django.db, ну, в общем, и что? то, что django.db биты импорта, скажем, django.utils, потому что существуют структуры данных и другие биты кода, которые полезны для больше, чем просто, ORM прекрасен, что касается меня; можно было бы также жаловаться, имеет ли что-то внешние зависимости или использует стандартные библиотеки Python вместо того, чтобы быть на 100% автономным.

89
ответ дан James Bennett 4 August 2019 в 22:16
поделиться

(Я сообщаю о своем решении, потому что мой вопрос является дубликатом)

А, хорошо, я понял это и опубликую решения для всех, кто попытается сделать то же самое.

Это решение предполагает, что вы хотите создать новые модели.

Сначала создайте новую папку для хранения ваших файлов. Мы назовем его «StandAlone». В «standAlone» создайте следующие файлы:

__init__.py
myScript.py
settings.py

Очевидно, «myScript.py» может иметь любое имя.

Затем создайте каталог для ваших моделей.

Мы назовем каталог нашей модели «myApp», но понимаем, что это обычное приложение Django в рамках проекта, поэтому назовите его в соответствии с коллекцией моделей вы пишете.

В этом каталоге создайте 2 файла:

__init__.py
models.py

Вам понадобится копия manage. py из существующего проекта Django, или вы можете просто получить копию из пути установки Django:

django\conf\project_template\manage.py

Скопируйте manage.py в каталог / standAlone. Хорошо, теперь у вас должна быть следующая структура:

\standAlone
    __init__.py
    myScript.py
    manage.py
    settings.py
\myApp
    __init__.py
    models.py

Добавьте следующее в свой файл myScript.py:

# settings.py
from django.conf import settings

settings.configure(
    DATABASE_ENGINE    = "postgresql_psycopg2",
    DATABASE_NAME      = "myDatabase",
    DATABASE_USER      = "myUsername",
    DATABASE_PASSWORD  = "myPassword",
    DATABASE_HOST      = "localhost",
    DATABASE_PORT      = "5432",
    INSTALLED_APPS     = ("myApp")
)

from django.db import models
from myApp.models import *

и добавьте это в свой файл settings.py:

    DATABASE_ENGINE    = "postgresql_psycopg2"
    DATABASE_NAME      = "myDatabase"
    DATABASE_USER      = "myUsername"
    DATABASE_PASSWORD  = "myPassword"
    DATABASE_HOST      = "localhost"
    DATABASE_PORT      = "5432",
    INSTALLED_APPS     = ("myApp")

и, наконец, свой myApp / models.py:

# myApp/models.py
from django.db import models

class MyModel(models.Model):
     field = models.CharField(max_length=255)

и это все. Теперь, чтобы Django управлял вашей базой данных, в командной строке перейдите в наш / standalone каталог и выполните:

manage.py sql MyApp
10
ответ дан 27 November 2019 в 00:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: