Используете слой базы данных Django вне Django? - PullRequest
64 голосов
/ 02 февраля 2010

У меня есть хорошая база данных, которую я создал в Django, и я хотел бы взаимодействовать с помощью некоторых сценариев Python вне моего веб-сайта, поэтому мне интересно, если это возможно использовать API базы данных Django вне сайта Django, и если да, есть ли у кого-нибудь какая-либо информация о том, как это можно сделать? Google не дал много хитов за это.

Ответы [ 9 ]

62 голосов
/ 02 февраля 2010

Вам просто нужно настроить параметры 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 БД как обычно.

15 голосов
/ 29 октября 2014

Для 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()
12 голосов
/ 02 февраля 2010

Обновление 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
8 голосов
/ 02 февраля 2010

Последний вариант, о котором никто не упомянул: подкоманда custom ./manage.py .

3 голосов
/ 07 августа 2013

Для 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'
)
2 голосов
/ 29 сентября 2018

Вот код, который я использую. Просто замените 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)
2 голосов
/ 26 января 2018
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
2 голосов
/ 02 февраля 2010

Для использования 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'
1 голос
/ 08 апреля 2018

Основываясь на ответе Хай Ху , вот рабочий скрипт, протестированный на 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...