我正在用Django开发应用程序。
我想将数据加载到模型中,即glossary_entry,但数据存储在xlsx文件中,即dati_prova.xlsx。
glossary_entry
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:应用尚未加载。
文件“ 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移入
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’
这次怎么了
我用下面的代码替换了在第一个问题中显示的第一个代码块,从而解决了这个问题:
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