在Django之外使用Django ORM
问题描述:
我是Django的新手,想要在脚本中使用它的ORM,而不需要运行整个Django。我正在摸索如何配置它。搜索StackOverflow没有帮助,因为答案没有显示完整的图片。在Django之外使用Django ORM
因此,我创建了一个小项目:
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
,最后我的主文件的应用程序。 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.
我在做什么错?
答
下面是一个更新版本,修复了包括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'))
希望有人会觉得很有用。
django拥有管理命令,您可以在不运行runserver的情况下以脚本运行。在这里阅读更多信息:https://docs.djangoproject.com/en/1.11/howto/custom-management-commands/ –
使用自定义命令@VikashSingh已经提到。另一种方法是https://stackoverflow.com/a/41826771/5616580 – mateuszb
您正在配置'manage.py'中的设置,但您正在运行'app.py'。如果你要运行'app.py'这是你需要配置它们的地方。在使用ORM之前,您还需要调用'django.setup()'。 – knbk