【问题标题】:Accessing django models from a new script从新脚本访问 django 模型
【发布时间】:2017-05-07 02:04:10
【问题描述】:

我已经看到很多关于如何在项目之外使用 django 模型的答案。但我没有任何成功。我试图实现this 答案,但出现错误。我在我的应用程序中创建了一个新文件“script.py”。

脚本.py

from django.conf import settings
settings.configure(
    DATABASE_ENGINE = 'sqlite3',
    DATABASE_NAME = '/home/shivam/study/Python/automation/project/db.sqlite3',
    DATABASE_USER = '',
    DATABASE_PASSWORD = '',
    DATABASE_HOST = '',
    DATABASE_PORT = '',
    TIME_ZONE = 'America/New_York',
)
from models import *

当我运行这个脚本时,我得到一个错误。

Traceback (most recent call last):
  File "script.py", line 11, in <module>
    from models import *
  File "/home/shivam/study/Python/automation/project/videos/models.py", line 11, in <module>
    class video(models.Model):
  File "/home/shivam/study/Python/automation/env/local/lib/python2.7/site-packages/django/db/models/base.py", line 105, in __new__
    app_config = apps.get_containing_app_config(module)
  File "/home/shivam/study/Python/automation/env/local/lib/python2.7/site-packages/django/apps/registry.py", line 237, in get_containing_app_config
    self.check_apps_ready()
  File "/home/shivam/study/Python/automation/env/local/lib/python2.7/site-packages/django/apps/registry.py", line 124, in check_apps_ready
    raise AppRegistryNotReady("Apps aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 为什么不做一个管理命令?

标签: python django


【解决方案1】:

正如例外所说,没有安装任何应用程序,因此您还没有模型。

from django.conf import settings
settings.configure(
    DATABASE_ENGINE = 'sqlite3',
    DATABASE_NAME = '/home/shivam/study/Python/automation/project/db.sqlite3',
    # ....
    INSTALLED_APPS=["myapp","myotherapp"]

)
from myapp.models import *

【讨论】:

  • 文件“script.py”,第 12 行,在 from videos.models import * ImportError: No module named videos.models 其中“videos”是应用程序的名称。
  • 该应用在您的PYTHONPATH 中吗?我假设script.pyvideos 文件夹之外。
  • 我将 script.py 保留在视频之外,但现在我得到了原始错误。
【解决方案2】:

您需要的是可导入的设置。

import os
import django
os.environ["DJANGO_SETTINGS_MODULE"] = 'project.settings'
django.setup()
from .models import 

另一种通过 django shell 调用脚本的方法:

python manage.py shell < script.py

【讨论】:

  • 这个解决方案对我不起作用并给出了这个错误:'django.core.exceptions.AppRegistryNotReady: Apps are not loaded yet.'
  • 哪个 django 版本?只尝试 import django django.setup()
【解决方案3】:

以下解决方案通过位于 manage.py 所在目录中的脚本运行:

import os
from django.conf import settings
from django.apps import apps

conf = {
    'INSTALLED_APPS': [
        'Demo'
    ],
    'DATABASES': {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join('.', 'db.sqlite3'),
        }
    }
}

settings.configure(**conf)
apps.populate(settings.INSTALLED_APPS)

将 Demo 替换为您的应用名称,并为您的应用放置正确的数据库配置。这个解决方案在 Django 1.9 上对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 2018-02-13
    相关资源
    最近更新 更多