Используете слой базы данных Django вне Django?
У меня есть хорошая база данных, которую я создал в Django, и я хотел бы взаимодействовать через некоторые скрипты на python вне содержимого моего веб-сайта, поэтому мне любопытно, возможно ли использовать API базы данных Django вне Django сайт, и если да, есть ли у кого-нибудь информация о том, как это можно сделать? Google не дал много хитов для этого.
12 ответов
Вам просто нужно настроить параметры Django, прежде чем делать какие-либо звонки, включая импорт ваших моделей. Что-то вроде этого:
from django.conf import settings
settings.configure(
DATABASE_ENGINE = 'postgresql_psycopg2',
DATABASE_NAME = 'db_name',
DATABASE_USER = 'db_user',
DATABASE_PASSWORD = 'db_pass',
DATABASE_HOST = 'localhost',
DATABASE_PORT = '5432',
TIME_ZONE = 'America/New_York',
)
Опять же, обязательно запустите этот код перед запуском, например:
from your_app.models import *
Тогда просто используйте API БД как обычно.
Для django 1.7 я использовал следующее, чтобы начать работу.
settings.py:
from django.conf import settings
settings.configure(
DATABASES={
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'name',
'USER': 'usr',
'PASSWORD': 'secret',
'HOST': '127.0.0.1',
'PORT': '5432',
},
},
TIME_ZONE='America/Montreal',
)
В файле, содержащем подпрограмму запуска
import os
import django
import v10consolidator.settings
from myapp.models import *
os.environ.setdefault(
"DJANGO_SETTINGS_MODULE",
"myapp.settings"
)
django.setup()
Обновление setup_environ должно быть удалено в Django 1.6
Если вы можете импортировать файл settings.py, взгляните на удобную команду setup_environ.
from django.core.management import setup_environ
from mysite import settings
setup_environ(settings)
#here you can do everything you could in your project
Я искал ответы для django 3.0, и ни один из вышеперечисленных методов у меня точно не работал.
Я прочитал официальные документы по адресу https://docs.djangoproject.com/en/3.0/topics/settings/, и эти сценарии у меня сработали.
мой скрипт db_tasks.py находится внутри такого сайта.
mysite
mysite
db.sqlite3
db_tasks.py
manage.py
polls
db_tasks.py
import os
import django
os.environ['DJANGO_SETTINGS_MODULE'] = 'dashboard.settings'
django.setup()
from polls.models import Question
print(Question.objects.all())
out: <QuerySet [<Question: WTU?]>
Последний вариант, о котором никто не упомянул: обычай ./manage.py
подкоманда.
Вот код, который я использую. Просто замени your_project
с вашим именем проекта Django, yourApp
с вашим именем приложения Django, any_model
с моделью, которую вы хотите использовать в файле моделей и any_fild
с полем, которое вы хотите получить из базы данных:
from django.conf import settings
import django
from your_project.settings import DATABASES, INSTALLED_APPS
settings.configure(DATABASES=DATABASES, INSTALLED_APPS=INSTALLED_APPS)
django.setup()
from yourApp.models import *
print(any_model.objects.all()[0].any_fild)
Для использования Django ORM из других приложений вам необходимо:
1) export DJANGO_SETTINGS_MODULE=dproj.settings
2) Добавьте папку вашего приложения Django в путь (вы можете сделать это в коде вашего не-django-приложения):
sys.path = sys.path + ['/path/to/your/app/']
3) Если вы используете SQLite, используйте полный путь к файлу БД в settings.py:
DATABASE_NAME = '/path/to/your/app/base.db'
Для django 1.5 on (поддерживается несколько баз данных) настройки DATABASE также изменились. Вам нужно адаптировать предыдущий ответ к...
settings.configure(
DATABASES = { 'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'db_name',
'USER': 'db_usr',
'PASSWORD': 'db_pass',
'HOST': '',
'PORT': '',
}, },
TIME_ZONE = 'Europe/Luxembourg'
)
import os, sys
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project_name.settings")
sys.path.append(os.path.abspath(os.path.join(BASE_DIR, os.pardir)))
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
from app.models import MyModel
Основываясь на ответе Хай Ху, вот рабочий скрипт, протестированный на Django 1.10 и 1.11. Сначала я импортирую базовые приложения Django, потому что они нужны во многих других приложениях.
import os
from django.conf import settings
from django.apps import apps
conf = {
'INSTALLED_APPS': [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.messages',
'django.contrib.sessions',
'django.contrib.sitemaps',
'django.contrib.sites',
'django.contrib.staticfiles',
'<your_app>',
],
'DATABASES': {
'default': {
'ENGINE': os.environ.get('DB_ENGINE'),
'NAME': os.environ.get('DB_NAME'),
'USER': os.environ.get('DB_USER'),
'PASSWORD': os.environ.get('DB_PASSWORD'),
'HOST': os.environ.get('DB_HOST'),
'PORT': os.environ.get('DB_PORT'),
}
},
'TIME_ZONE': 'UTC'
}
settings.configure(**conf)
apps.populate(settings.INSTALLED_APPS)
<import your app models here>
В Django>= V.3.2.3 Поместите следующее перед импортом модели
import os
import django
os.environ.setdefault(
'DJANGO_SETTINGS_MODULE', 'mymodule.settings'
)
django.setup()
from app.models import MyModel
Затем используйте свою модель как обычно.
myitem = MyModel()
myitem.data = 'some data'
myitem.save()
С Уважением
для django 3+:
#########################
структура каталогов и файлов:
--мой проект
---- мой_проект> settings.py
----мои приложения
#########################
import sys
sys.path.append("C:/Users/khder/Desktop/test/my_project") #append your main project directory path
import os
import django
#define your setting file as the following.
os.environ.setdefault(
'DJANGO_SETTINGS_MODULE', 'my_project.settings'
)
django.setup()
from my_app.models import MyModel
qs = MyModel.objects.all()
print(qs)
я надеюсь, что это полезно. сделано.