python - mac - ¿Usando la capa de la base de datos Django fuera de Django?
mysql-python (8)
Basado en la respuesta de Hai Hu , aquí hay un script en funcionamiento, probado en Django 1.10 y 1.11. Primero importo 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'',
''<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>
Tengo una buena base de datos que he creado en Django, y me gustaría interactuar con algunas secuencias de comandos de Python fuera de mi sitio web, por lo que tengo curiosidad si es posible usar la API de la base de datos de Django fuera de Django. sitio, y si es así, ¿alguien tiene información sobre cómo se puede hacer? Google no ha producido muchos éxitos para esto.
Para django 1.5 on (se admiten varias bases de datos), la configuración de DATABASE también cambió. Debes 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 django 1.7, utilicé lo siguiente para ponerme en funcionamiento.
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()
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 no 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''
Solo necesita 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'',
)
De nuevo, asegúrese de ejecutar ese código antes de ejecutar, por ejemplo:
from your_app.models import *
Entonces solo usa la API DB como de costumbre.
Una última opción que nadie mencionó: un subcomando personalizado ./manage.py
.
La actualización de setup_environ se eliminará en django 1.6
Si puede importar su archivo settings.py, 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
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