Как использовать 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