从单独的Django项目的脚本运行不同的Django项目的数据库脚本

时间:2014-10-22 21:29:54

标签: python django

我有两个完全独立的数据库,它们运行在完全不同的Django项目中。在一个项目中,有一个脚本可以分析数据并将结果输出为CSV。在另一个项目中,有一个脚本可以获取该CSV并将其结果输入到其数据库中。

我想要做的是自动化这个过程,当我运行分析脚本并输出CSV时,然后我调用第二个项目的数据库脚本并让它将新的CSV数据导入其数据库

现在显而易见的事情是导入,但由于它是一个django项目,这会导致很多问题,主要是设置文件丢失,数据库导入错误,等等。

我尝试将其作为子进程运行,如下所示:

    subprocess.call("cd {0}\n python database2_import.py".format(project2_dir), shell=True)

但这也没有奏效,强烈建议反对。 我收到一条错误,指出它无法导入project1设置,因为我正在尝试运行project2脚本,这令人困惑。

ImportError: Could not import settings 'project1.settings' (Is it on sys.path? Is there an import error in the settings file?): No module named project1.settings

实现这一目标的最佳方式是什么?

基本上我只想运行等价的" python database2_import.py"来自project' s_1脚本。

1 个答案:

答案 0 :(得分:0)

我发现要使子进程方法起作用,您需要指定正确的环境。由于子进程是从project1的脚本运行的,即使它正在尝试运行project2的脚本,它仍然使用项目1中的环境。

只需将适当的环境作为参数分配给subprocess.Popen。

import subprocess
my_env = os.environ
my_env["DJANGO_SETTINGS_MODULE"] = "Project2.settings"
command = "cd {0}\n python python database2_import.py".format(project2_dir)
result = subprocess.Popen(command, shell=True, env=my_env)

话虽这么说,我仍然宁愿不使用子进程方法,所以在将此标记为答案之前我会坚持下去。