一尘不染

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

python

我正在用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中的第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一样。有什么问题?也许正在读另一集

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

我已将脚本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:[Errno 2]没有这样的文件或目录:’csv_file’

这次怎么了


阅读 280

收藏
2021-01-20

共1个答案

一尘不染

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

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
2021-01-20