我是Django的新手,想在我的脚本中使用它的ORM,而不需要运行整个Django。我正在摸不着如何配置它。对StackOverflow的搜索没有帮助,因为答案没有显示完整的图片。
因此,我创建了一个小项目:
app.py
manage.py
orm/
__init__.py
models.py
manage.py有配置:
from django.conf import settings
settings.configure(
DATABASE_ENGINE = 'mysql',
DATABASE_NAME = 'db',
DATABASE_USER = 'admin',
DATABASE_PASSWORD = '',
DATABASE_HOST = 'localhost',
INSTALLED_APPS = ('orm')
)
models.py:
from django.db import models
class Label(models.Model):
name = models.CharField(max_length=50) # required max_length
最后是我的主文件app.py:
from django.conf import settings
from django.db import models
from orm.models import *
\# do database maniupaltions
虽然在运行app.py后我收到一条错误消息:
django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
我做错了什么?
答案 0 :(得分:4)
所以你的问题是:
我想在我的脚本中使用Django的ORM而不运行完整的Django应用程序,如何配置它?
我将使用 Django 2.0.2 分享我目前正在进行的项目所做的工作。
我建议你创建一个文件SetupDjangoORM.py
:
import django
from django.conf import settings
settings.configure(
DATABASES={
'default': {
'ENGINE': '<your_engine>',
'NAME': '<database_name>',
'HOST': '<hostname_or_ip>',
'PORT': '<port>',
'USER': '<user>',
'PASSWORD': '<super_secret_password>',
}
},
INSTALLED_APPS=[
'<your_app>',
]
)
django.setup()
您可以在settigns.py
文件中找到此信息。
然后,您可以在任何需要的地方导入:
from . import SetupDjangoORM
现在您可以在脚本中使用Django Models(ORM)。
答案 1 :(得分:4)
您可以找到所有信息here
这适用于 Django 3.1 版
import django
from django.conf import settings
from myapp import myapp_defaults
settings.configure(default_settings=myapp_defaults, DEBUG=True)
django.setup()
# Now this script or any imported module can use any part of Django it needs.
from myapp import models
答案 2 :(得分:1)
这是一个更新版本,修复包括django.setup()
行和一些其他设置,包括:
manage.py
import os
import sys
import django
from django.conf import settings
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
INSTALLED_APPS = [
'orm',
]
DATABASES = {
'default': {
'ENGINE' : 'django.db.backends.mysql',
'NAME' : 'playground',
'USER' : 'admin',
'PASSWORD' : 'pasw',
'HOST' : 'localhost',
}
}
settings.configure(
INSTALLED_APPS = INSTALLED_APPS,
DATABASES = DATABASES,
)
django.setup()
if __name__ == "__main__":
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
app.py:
import manage
from orm.models import Label
if __name__ == '__main__':
Label.objects.create(name='test')
print(Label.objects.get(name='test'))
希望有人会发现它很有用。