Как использовать Django 1.8.5 ORM без создания проекта Django?

Я использовал Django ORM для одного из своих веб-приложений, и я очень доволен им. Теперь у меня есть новое требование, которому нужна база данных, но больше ничего, что предлагает Django. Я не хочу тратить больше времени на изучение еще одного ORM, такого как sqlalchemy.

Я думаю, что я все еще могу сделать
from django.db import models
и создавать модели, но потом без manage.py как бы я сделал миграцию и синхронизацию?

5 ответов

Существует множество ответов, которые работают со старыми версиями Django, но Django постоянно обновляется, и в своем исследовании я не нашел подходящего ответа для Django 1.8/1.9, поэтому мне пришлось свернуть свой собственный. Вот как вы это делаете:

Структура проекта:

├── data
│   ├── __init__.py
│   ├── migrations
│   │   └── __init__.py
│   └── models.py
├── main.py
├── manage.py
└── settings.py

data каталог и каталог миграций содержат пустой __init__.py файлы. Пример models.py Файл выглядит следующим образом:

from django.db import models

class User(models.Model):
    name = models.CharField(max_length=255)
    email = models.EmailField(max_length=255)

manage.py файл типичного джанго manage.py файл. Просто не забудьте изменить параметр настройки в os.environ.setdefault если вы скопируете его из свежего django-admin startproject команда:

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
    from django.core.management import execute_from_command_line
    execute_from_command_line(sys.argv)

settings.py Файл требует 3 настроек: DATABASES, INSTALLED_APPS и SECRET_KEY. Обратитесь к документации Django для баз данных, которые не являются SQLite:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'sqlite.db',
    }
}

INSTALLED_APPS = (
    'data',
    )

SECRET_KEY = 'REPLACE_ME'

Настоящий трюк в main.py, который будет где вы можете код против ваших моделей. Видимо, вы должны использовать wsgi чтобы все работало с этими двумя строками:

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

Вот пример main.py:

# Django specific settings
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")

### Have to do this for it to work in 1.9.x!
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
#############

# Your application specific imports
from data.models import *

#Add user
user = User(name="someone", email="someone@example.com")
user.save()

# Application logic
first_user = User.objects.all()[0]

print(first_user.name)
print(first_user.email)

Этот проект вместе с этим постом были полезными отправными точками для меня, чтобы найти ответ, и мой запрос на извлечение с рабочим кодом для Django 1.9 был объединен, так что теперь вы можете получить код из репозитория masnun. Если вы знаете лучший способ, пожалуйста, отправьте запрос на удаление.

Документация Django 1.11 о том, как загружаются приложения

Для последней версии Django структура проекта будет

|--myproject
|--main.py
|--manage.py
|--myapp
|   |--models.py
|   |--views.py
|   |--admin.py
|   |--apps.py
|   |--__init__.py
|   |--migrations
|--myproject
|   |--settings.py
|   |--urls.py
|   |--wsgi.py
|   |--__init__.py

Для запуска миграций вам все еще нужен файл manage.py, main.py - ваш автономный скрипт

# main.py
import os
import django
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'
django.setup()
from myapp.models import MyModel
print(MyModel.objects.all()[0])
import os
from django.conf import settings
from django.apps import apps

conf = {
    'INSTALLED_APPS': [
        'Demo'
    ],
    'DATABASES': {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join('.', 'db.sqlite3'),
        }
    }
}

settings.configure(**conf)
apps.populate(settings.INSTALLED_APPS)

Тест на Джанго 1.11.x

Это сработало для меня:

import os
# replace project_name with your own project name
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project_name.settings")
django.setup()
from core.models import Customer,Jobs,Payments

# Your script code

Мне пришлось добавить import django, и тогда это сработало.

Другие вопросы по тегам