我想从一个独立的python脚本编写Django模型,该脚本生成一个CSV文件,但似乎处于错误的环境中

我想从一个独立的python脚本编写Django模型,该脚本生成一个CSV文件,但似乎处于错误的环境中,python,django,csv,django-models,Python,Django,Csv,Django Models,我有一个独立的python脚本,定期自动运行,从外部数据生成CSV文件 我想如果这个脚本还可以更新在virtualenv中运行的Django应用程序中的相应模型 我在脚本中添加了以下几行 from django.conf import settings settings.configure() from app.models import BER_assessors 该模型是BER_assessors,在django应用程序根目录下的app目录中的model.py文件中定义。该脚本也位于dja

我有一个独立的python脚本,定期自动运行,从外部数据生成CSV文件

我想如果这个脚本还可以更新在virtualenv中运行的Django应用程序中的相应模型

我在脚本中添加了以下几行

from django.conf import settings
settings.configure()
from app.models import BER_assessors
该模型是BER_assessors,在django应用程序根目录下的app目录中的model.py文件中定义。该脚本也位于django应用程序(包含app/authentication/core/env/media等文件夹的应用程序)的根目录下

当我运行脚本时,会收到错误消息“django.core.exceptions.AppRegistryNotReady:尚未加载应用程序”。django应用程序本身运行正常

我认为这是一个上下文或环境的问题,即我不在应用程序中,因此无法向模型写入内容等。 我怎样才能纠正这个问题


向您致意/Colm

独立脚本的正确顺序是:

导入django os.environ.setdefault('DJANGO\u SETTINGS\u MODULE','MODULE.SETTINGS') django.setup() #其他与django相关的导入现在可以完成。
我无法得到上面的答案。它一直告诉我其他模块没有定义。所以在挖掘之后,我发现我需要激活virtualenv以使所有这些模块都可用

给了我正确的方向,我最终在文件的顶部添加了以下内容

activate_this = '/full_path_to.../env/bin/activate_this.py'
exec(open(activate_this).read())
import sys
sys.path.append("/full_path_to.../env/lib/python3.7/site-packages")
import django
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings')
django.setup()
没有更多错误消息,脚本现在正在工作


脚本位于django安装的根文件夹中,settings.py文件位于核心子文件夹中

您的意思是更新数据库?为什么不创建一个迁移呢?然后用子进程运行这个迁移。如果它不应该是一个迁移,是一个常规任务,考虑写一个管理命令:谢谢@梅尔文,这看起来像路径。在第二行中,如果我在与settings.py相同的核心文件夹中运行独立脚本,我可以将“module.settings”替换为“settings”吗?理论上是的。实际上,这取决于设置文件和PYTHONPATH中的引用。例如,您的
ROOT\u URLCONF
WSGI\u应用程序
设置很可能分别引用
module.url
module.WSGI:APPLICATION
。阻力最小的路径是从
manage.py
所在的目录运行脚本。