Используйте Django ORM как автономный

Возможные дубликаты:
Использовать только некоторые части Django?
Использование только части БД Django

Я хочу использовать Django ORM как автономный. Несмотря на час поиска в Google, у меня все еще осталось несколько вопросов:

  • Требуется ли мне настроить мой проект Python с каталогом settings.py, /myApp/ и файлом modules.py?
  • Могу ли я создать новый models.py и запустить syncdb, чтобы он автоматически настроил таблицы и отношения, или я могу использовать только модели из существующих проектов Django?
  • Кажется, есть много вопросов относительно PYTHONPATH. Если вы не звоните существующим моделям, нужно ли это?

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

db/
   __init__.py
   settings.py
   myScript.py
orm/
   __init__.py
   models.py

И основное необходимое:

# settings.py
from django.conf import settings

settings.configure(
     DATABASE_ENGINE   = "postgresql_psycopg2",
     DATABASE_HOST     = "localhost",
     DATABASE_NAME     = "dbName",
     DATABASE_USER     = "user",
     DATABASE_PASSWORD = "pass",
     DATABASE_PORT     = "5432"
)

# orm/models.py
# ...

# myScript.py
# import models..

И нужно ли запускать что-то вроде: django-admin.py inspectdb...

(О, я использую Windows, если это что-то меняет в отношении аргументов командной строки.).


person KeyboardInterrupt    schedule 02.06.2009    source источник
comment
Вопрос, связанный с Уильямом Бренделем, имеет лучший ответ, но также см. stackoverflow.com/questions/579511 для дальнейшего обсуждения.   -  person Van Gale    schedule 02.06.2009
comment
Мне интересно, как вы искали в Google в течение 1 часа и не получили ответы на вопросы в комментариях Ван Гейла и Уильяма Брендела.   -  person lprsd    schedule 02.06.2009
comment
это не точная копия - хотя этот пост помог мне найти ответ, это было не то, что я искал. Я надеюсь, что закрытое как точная копия не изменит возможности поиска моего решения ниже, потому что оно намного более тщательное и как создавать модели, которые больше нигде не конвертируются.   -  person KeyboardInterrupt    schedule 02.06.2009
comment
становлениеГуру: потому что все мои поиски касались использования ORM Джанго. Я не думал искать что-то столь же общее, как использование частей django.   -  person KeyboardInterrupt    schedule 04.06.2009
comment
Я создал шаблон проекта Django, который позволяет вам сделать именно это. github.com/dancaron/Django-ORM   -  person devdrc    schedule 10.10.2016


Ответы (1)


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

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

Сначала создайте новую папку для хранения файлов. Мы назовем его «автономным». В «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
person Community    schedule 02.06.2009
comment
Обновите stackoverflow.com/questions/302651/ с новой или другой информацией. Пожалуйста, добавьте свой ответ к этой версии вашего вопроса. - person S.Lott; 02.06.2009
comment
В моем случае, чтобы это работало (python2.7), мне нужно было изменить ("myApp") на ("myApp",), мне также нужно было добавить каталог верхнего уровня к sys.path. Кроме того, settings.py может быть пустым (у меня сработало) — не нужно дублировать информацию о подключении. - person Nikita; 11.07.2011
comment
В чем смысл settings.py, если вы предоставляете все те же значения в своем вызове settings.configure() в myScripy.py? - person Scott P.; 18.01.2019