如何定期运行Python脚本将数据导入Django应用程序?

时间:2012-07-05 17:30:22

标签: python django data-importer

我有一个脚本可以扫描电子邮件收件箱中的特定电子邮件。那部分工作得很好,我能够获得我感兴趣的数据。我现在想把这些数据添加到Django应用程序中,用于显示信息。

我可以在CRON作业上运行脚本来定期获取新信息,但是如何将这些数据导入Django应用程序?

Django服务器在Apache / FastCGI下的Linux机器上运行,如果这有所不同。

[编辑] - 回应斯里卡的问题When you are saying " get that data into the Django app" what exactly do you mean? ......

Django应用程序将负责以方便的形式存储数据,以便可以通过一系列视图显示它。因此,应用程序将包含一个具有合适成员的模型来存储传入的数据。我只是不确定你是如何挂钩Django来创建那些模型对象的新实例并告诉Django存储它们。

8 个答案:

答案 0 :(得分:4)

我认为Celery正是您所寻找的。

答案 1 :(得分:2)

您可以根据需要编写自定义管理命令来加载数据,并通过cron作业运行该命令。您可以参考Writing custom commands

您也可以尝试使用现有的loaddata命令,但它会尝试从应用目录中添加的fixture中加载数据。

答案 2 :(得分:1)

暂时忘记这是一个Django应用程序。它只是一堆Python代码。

这意味着,您的Python脚本可以完全免费导入Django应用程序中的数据库模型,并像在项目的标准模块中一样使用它们。

这里唯一的区别是,您可能需要注意导入Django需要使用这些模块的所有内容,而当请求通过正常的Web界面进入时,它会为您处理。

只需从您的应用程序导入Django和所需的models.py/所需的其他模块即可。这是你的代码,而不是黑盒子。你可以从你想要的地方导入它。

编辑: Rohan对自定义管理命令的Django文档的回答链接绝对是我上面所说的最不痛苦的方法。

答案 3 :(得分:0)

当您说“将数据输入DJango应用程序”时,您究竟是什么意思?

我猜你正在使用某种数据库(比如mysql)。将您从cronjob收集的任何数据插入Django应用程序正在访问的相应表中。还要将此cron数据插入用户正在访问的相同表中。这样,您的更改会立即反映给使用该应用的用户,因为他们将从同一个表中访问数据。

答案 4 :(得分:0)

最好的方式?

在django端创建一个视图来处理接收数据,让你的脚本对注册到该视图的URL进行HTTP POST。

您也可以从脚本中导入模型等,但我认为这不是一个好主意。

答案 5 :(得分:0)

让您的脚本发送HTTP Post请求。这是库请求

>>> files = {'report.xls': open('report.xls', 'rb')}

>>> r = requests.post(url, files=files)
>>> r.text

然后在接收方,你可以使用web.py来处理这样的信息

x = web.input()

然后用x

做任何你想做的事

在POST请求的接收方导入Web并编写处理帖子的函数

例如

    def POST(self):

        x = web.input()

答案 6 :(得分:0)

如果您不想使用HTTP来回发送消息,您可以让脚本将电子邮件信息写入.txt文件,然后让您的django应用程序打开该文件并阅读它。

编辑:

您可以将CRON作业设置为在早上8点读取电子邮件,然后将其写入文本文件info.txt。代码中的内容类似于

import time
    if '9' == time.strftime("%H"):
        file = open(info.txt)
        info = file.read()

将在上午9点检查文件,直到上午10点。如果你只想检查一次,那么也只需要添加if语句。

答案 7 :(得分:0)

我做了同样的事情。

首先,我的脚本已经解析了电子邮件并将它们存储在数据库中,所以我在settings.py中设置了db,并使用python manage.py inspectdb基于该数据库创建模型。

然后,只需构建一个视图来显示数据库中的信息。

如果您的脚本尚未使用数据库,那么创建一个包含您想要存储的信息的模型会很简单,然后强制您的脚本写入模型描述的表。