我在Django中创建了一个很好的数据库,想通过一些Python脚本与其进行交互,而不是通过我的网站。我想知道是否可以在Django站点外部使用Django数据库API,并且如果可以,是否有人了解如何实现?谷歌没有给出很多有用的结果。
在进行任何调用之前,包括导入您的模型,您只需要配置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 *
然后像平常一样使用DB API。
对于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()
更新:在Django 1.6中将删除setup_environ。
如果您能够导入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
我在寻找有关Django 3.0的答案,但以上方法都并没有完全适用于我。
我阅读了官方文档https://docs.djangoproject.com/en/3.0/topics/settings/,这些脚本对我起到了作用。
项目结构
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?]>
python db_task.py
时,我收到了一个错误消息 ModuleNotFoundError: No module named 'project_name'
。还有其他的输入吗? - codecumber这是我使用的代码。只需将your_project
替换为您的Django项目名称,将yourApp
替换为您的Django应用程序名称,将any_model
替换为您想在models文件中使用的模型,将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)
./manage.py
子命令。详情请参考自定义管理命令。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
如果要从其他应用程序中使用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'
对于支持多数据库的Django 1.5+版本,DATABASE设置也有所变化。你需要根据以下方式进行调整...
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
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>
settings.py
文件,这样就足够了吧? - Daniel W.