¿Usar la capa de base de datos Django fuera de Django?

Tengo una buena base de datos que he creado en Django, y me gustaría interactuar con algunos scripts de Python fuera de mi sitio web, así que tengo curiosidad si es posible usar la API de la base de datos de Django fuera de un Django. sitio, y si es así, ¿alguien tiene alguna información sobre cómo se puede hacer? Google no ha dado muchos éxitos por esto.

Solo debe configurar los ajustes de Django antes de realizar cualquier llamada, incluida la importación de sus modelos. Algo como esto:

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', ) 

Nuevamente, asegúrese de ejecutar ese código antes de ejecutar, por ejemplo:

 from your_app.models import * 

Luego solo usa la API DB como de costumbre.

Para django 1.7, usé lo siguiente para empezar a funcionar.

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', ) 

En el archivo que contiene la rutina de inicio.

 import os import django import v10consolidator.settings from myapp.models import * os.environ.setdefault( "DJANGO_SETTINGS_MODULE", "myapp.settings" ) django.setup() 

La actualización setup_environ se eliminará en django 1.6

Si puede importar su archivo settings.py, entonces eche un vistazo al práctico comando 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 

Una última opción que nadie mencionó: un subcomando ./manage.py personalizado .

Para django 1.5 activado (se soportan múltiples bases de datos) la configuración de la BASE DE DATOS también cambió. Necesitas adaptar la respuesta anterior a …

 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' ) 

Para usar Django ORM desde otras aplicaciones necesita:

1) export DJANGO_SETTINGS_MODULE=dproj.settings

2) Agregue su carpeta de la aplicación Django a la ruta (puede hacerlo en el código de su aplicación que no sea Django):

 sys.path = sys.path + ['/path/to/your/app/'] 

3) Si usa SQLite, use la ruta completa al archivo db en 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 

Aquí está el código que utilizo. Simplemente reemplace your_project con el nombre de su proyecto Django, su aplicación con el nombre de su aplicación Django, any_model con el modelo que desea usar en el archivo de modelos y any_fild con el campo que desea obtener de la base de datos:

 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) 

Basado en la respuesta de Hai Hu , aquí hay un script de trabajo, probado en Django 1.10 y 1.11. Primero importo las aplicaciones base de Django porque son necesarias en muchas otras aplicaciones.

 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', '', ], '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)