J'ai créé une base de données Nice dans Django et j'aimerais communiquer avec certains scripts python en dehors de mon site Web. Je suis donc curieux de savoir s'il est possible d'utiliser l'API de base de données Django en dehors d'un site Django, et si tel est le cas, quelqu'un at-il des informations sur la manière de le faire? Google n'a pas donné beaucoup de résultats pour cela.
Avant de faire un appel, vous devez simplement configurer les paramètres Django, y compris pour importer vos modèles. Quelque chose comme ça:
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',
)
Encore une fois, assurez-vous d’exécuter ce code avant d’exécuter, par exemple:
from your_app.models import *
Ensuite, utilisez simplement l’API de base de données comme d’habitude.
Pour Django 1.7, j’ai utilisé ce qui suit pour être opérationnel.
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',
)
Dans le fichier contenant la routine de démarrage
import os
import Django
import v10consolidator.settings
from myapp.models import *
os.environ.setdefault(
"Django_SETTINGS_MODULE",
"myapp.settings"
)
Django.setup()
Update setup_environ doit être supprimé dans Django 1.6
Si vous parvenez à importer votre fichier settings.py, alors jetez un oeil at handy 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
Une dernière option à ne pas mentionner: une sous-commande custom ./manage.py
.
Pour Django 1.5 sur (plusieurs bases de données sont prises en charge), les paramètres de DATABASE ont également été modifiés . Vous devez adapter la réponse précédente à ...
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'
)
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
Pour utiliser Django ORM à partir d'autres applications, vous avez besoin des éléments suivants:
1) export Django_SETTINGS_MODULE=dproj.settings
2) Ajoutez votre dossier d'application Django au chemin (vous pouvez le faire dans le code de votre application non-Django):
sys.path = sys.path + ['/path/to/your/app/']
3) Si vous utilisez SQLite, utilisez le chemin complet du fichier de base de données dans settings.py:
DATABASE_NAME = '/path/to/your/app/base.db'
Voici le code que j'utilise. Il suffit de remplacer your_project
par votre nom de projet Django, yourApp
par votre nom d'application Django, any_model
par le modèle que vous souhaitez utiliser dans le fichier de modèle et any_fild
par le champ que vous souhaitez obtenir de la base de données:
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)
Basé sur la réponse de Hai Hu , voici un script fonctionnel, testé sur Django 1.10 et 1.11 . J'ai d'abord importé les applications de base de Django car elles sont nécessaires dans de nombreuses autres applications.
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>