¿Se puede usar la capa de base de datos de Django fuera de Django?

5 minutos de lectura

avatar de usuario de gct
gct

Tengo una buena base de datos que creé en Django y me gustaría interactuar con ella a través de algunos scripts de Python. fuera de de mis cosas del sitio web. Tengo curiosidad por saber si es posible usar la API de la base de datos de Django fuera de un sitio de Django, y si es así, ¿alguien tiene alguna información sobre cómo se puede hacer? Google no ha arrojado muchos resultados útiles para esto.

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

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

from your_app.models import *

Luego, simplemente use la API DB como de costumbre.

  • Tengo un conector (paquete) para conectarme a la base de datos de Hive, y puedo importarlo en un programa de python y obtener los datos de la base de datos de Hive. ¿Dónde coloco ese conector, es decir, en qué carpeta coloco y cómo nombro mi DATABASE_ENGINE? Gracias de antemano.

    – Thirumalreddy_Bandi

    7 de junio de 2016 a las 11:03

  • ¿Qué bibliotecas necesitamos agregar a requirements.txt para obtener esto?

    – Pratik Khadloya

    27 de febrero de 2018 a las 18:25

  • Me encuentro con un error que he documentado aquí stackoverflow.com/questions/49015994/…

    – Pratik Khadloya

    27 de febrero de 2018 a las 18:55

  • ¿No sería suficiente simplemente importar el settings.py con todo esto, que ya existe en el proyecto?

    – Daniel W.

    22 de junio de 2019 a las 13:48

Avatar de usuario de Gab
Charla

Para django 1.7, utilicé lo siguiente para ponerlo en marcha.

configuración.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()

Avatar de usuario de Dmitry Shevchenko
Dmitri Shevchenko

Actualizar setup_environ se eliminará en django 1.6

Si puede importar su archivo settings.py, entonces echar un vistazo en el 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

  • ¡Obsoleto! setup_environ, te extrañaré

    – Robo B

    24 de febrero de 2013 a las 5:18

  • Consulte mi pregunta de seguimiento para ver alternativas: stackoverflow.com/questions/15048963/…

    – Robo B

    25 de febrero de 2013 a las 18:43

Avatar de usuario de Rahul
Raúl

Estaba buscando respuestas para django 3.0 y ninguno de los métodos anteriores funcionó exactamente para mí.

Leí los documentos oficiales en https://docs.djangoproject.com/en/3.0/topics/settings/ y estos scripts funcionaron para mí.

Estructura del proyecto

mysite
    mysite
        ...
        settings.py
    db.sqlite3
    db_tasks.py
    manage.py
    polls

db_tasks.py:

import os
import django

os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
django.setup()

from polls.models import Question

print(Question.objects.all())
out: <QuerySet [<Question: WTU?]>

Avatar de usuario de Daniel Roseman
daniel rosaman

Una opción final que nadie ha mencionado: una disfraz ./manage.py subcomando.

Avatar de usuario de Artem
Artem

Aquí está el código que uso. solo reemplaza your_project con el nombre de tu proyecto Django, yourApp con el nombre de tu 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)

Avatar de usuario de Juanjo Conti
Juanjo Conti

Para usar Django ORM desde otras aplicaciones necesitas:

1) export DJANGO_SETTINGS_MODULE=dproj.settings

2) Agregue la carpeta de su aplicación Django a la ruta (puede hacerlo en el código de su aplicación que no es 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'

  • Como una alternativa hacky para configurar la variable de entorno correctamente, puede poner os.environ[‘DJANGO_SETTINGS_MODULE’]=dproj.settings en la parte superior antes de importar los módulos de su aplicación. Eso solo cambia DJANGO_SETTINGS_MODULE durante la duración de ese proceso.

    – twneale

    1 de febrero de 2010 a las 22:33

  • Este es un muy buen enfoque, no duplicar la configuración en lugar de la respuesta aceptada. Además, si la configuración de Django ya contiene la ruta absoluta al archivo SQLite, que es el caso con las versiones actuales de Djangodespués el paso 3 ya no es necesario. Haciéndola la solución más compacta.

    – Anuncio N

    3 de octubre de 2015 a las 9:07


¿Ha sido útil esta solución?