Использование уровня базы данных Django за пределами Django?
У меня есть хорошая база данных, которую я создал в Django, и я хотел бы взаимодействовать с помощью некоторых скриптов python за пределами моего веб-сайта, поэтому мне любопытно, можно ли использовать API базы данных Django за пределами сайта Django, и если да, то есть ли у кого-нибудь информация о том, как это можно сделать? Google не дал много хитов для этого.
9 ответов:
вам просто нужно настроить параметры 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 *
тогда просто используйте DB 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
окончательный вариант никто не упомянул: a custom
./manage.py
команда.
для django 1.5 on (поддерживаются несколько баз данных) настройки базы данных также изменились. Вам нужно адаптировать предыдущий ответ ...
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' )
для использования 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'
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
вот код, который я использую. Просто замените
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 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>