我正在用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'
这是怎么了?
答案 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