尝试将数据加载到模型中时出现“ django.core.exceptions.AppRegistryNotReady:应用尚未加载”的情况

时间:2019-10-09 13:24:52

标签: python model

我正在用Django开发应用程序。

我想将数据加载到模型内部,即glossary_entry,但是数据存储在xlsx文件中,即dati_prova.xlsx

为了实现这一目标,我开发了以下脚本:

import pandas as pd
from django.conf import settings

settings.configure()

from myapp.models import glossary_entry #this is line 7

path=r"mypath\dati_prova.xlsx"

with open(path) as f:
        reader = pd.read_excel(f)
        next(reader, None)  # skip the headers

        for row in reader:
                _, created = glossary_entry.objects.get_or_create(
                Lemma = row[0],
                Acronym = row[1],
                Definizione = row[2],
                )
            # creates a tuple of the new object or
            # current object and a boolean of if it was created

但是当我从Anaconda提示符运行它时,我得到了

  

文件“ load_glossary.py”,模块中的第7行   ...

     

提高AppRegistryNotReady(“尚未加载应用程序。”)   django.core.exceptions.AppRegistryNotReady:应用尚未加载。

出什么问题了?

请注意:

我的应用运行正常,只是上传数据脚本失败。

请注意:

我复制粘贴

from django.conf import settings

settings.configure()

来自堆栈溢出的答案,因为我遇到了错误:

  

django.core.exceptions.ImproperlyConfigured:请求的设置USE_TZ,   但未配置设置。您必须定义   环境变量DJANGO_SETTINGS_MODULE或调用   settings.configure(),然后再访问设置。

但是我没有经验,也不知道是什么错误。

------------------更新----------------------

我在https://groups.google.com/forum/#!topic/django-users/bF_lRbzzguA上读到它可能是

  

问题是您的一个应用程序导入了   在其顶级 init .py中进行建模。不支持为   说明,您可以阅读   https://docs.djangoproject.com/en/1.9/ref/applications/#how-applications-are-loaded

------------------更新----------------------

我将文件更改如下:

import pandas as pd

from django.conf import settings
settings.configure()

import django
django.setup() 


from myapp.models import mymodel

path=r"mypath\dati_prova.xlsx"

with open(path) as f:
        reader = pd.read_excel(f)
        next(reader, None)  # skip the headers

现在我得到了:

  

RuntimeError:模型类myapp.models.mymodel没有声明   明确的app_label,并且不在INSTALLED_APPS的应用程序中。

但这不是真的,因为我在settings.py中输入了我的应用名称,并且项目运行正常。只是脚本不起作用... 就像python无法读取我的settings.py一样。 有什么问题? 也许正在读另一本书

------------------更新----------------------

如此处的建议https://stackoverflow.com/a/38821174/7658051
我已将脚本load_glossary.py移至

  

myapp>管理>命令


将我的xlsx文件复制到一个csv文件中
并更新了代码,如下所示:

# myapp/management/commands/load_glossary.py

from django.core.management.base import BaseCommand, CommandError
import csv

class Command(BaseCommand):

    def add_arguments(self, parser):
        parser.add_argument('csv_file', nargs='+', type=str)

    def handle(self, *args, **options):
        for csv_file in options['csv_file']:
            dataReader = csv.reader(open(csv_file), delimiter=',', quotechar='"')
            for row in dataReader:

                Lemma=row[0],
                Acronym=row[1],
                Definition=row[2],


                # etc...
                self.stdout.write(
                    'Created glossary entry'

                )

我正在通过输入anaconda提示来吃午餐

python ./manage.py load_glossary csv_file "mypath\dati_prova.csv"

但是我明白了

  

第20行,在句柄中       dataReader = csv.reader(open(csv_file),delimiter =',',quotechar ='“')FileNotFoundError:[错误2]没有这样的文件或目录:   'csv_file'

这是怎么了?

1 个答案:

答案 0 :(得分:0)

我用下面的代码替换了在第一个问题中显示的第一个代码块,从而解决了这个问题:

import pandas as pd
from myapp.models import glossary_entry

def pour_entire_entry_model():

    elements = glossary_entry.objects.all() 

    for element in elements:

        entry = acquired_terminology.objects.create()

        entry.Lemma = element.Lemma
        entry.Acronym = element.Acronym
        entry.Definizione = element.Definizione 

            # creates a tuple of the new object or
            # current object and a boolean of if it was created