在Django之外使用Django ORM

时间:2017-08-09 16:09:41

标签: python django python-2.7 django-models orm

我是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.

我做错了什么?

3 个答案:

答案 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'))

希望有人会发现它很有用。