Django 定期更新数据库数据(使用django-crontab实现)

1.安装 

pip install django-crontab

2.添加app名称到 settings.py中

INSTALLED_APPS = (
'django_crontab',#这个不是app的名字,必须要添加到前面,不能接着app后面添加,否则会报错
...
)

3.接下来创建定时任务可以分成两种,一种是执行自定义的mange.py的命令,另一种是执行自定义函数。

我选择的方法是自定义函数。

首先在原来的app 中(与view.py同级)新建一个update1day.py,名字任意(建文件夹可能出错!)。

写入程序(这是一段爬虫,爬取数据,然后更新数据库中的数据)

import datetime
from COVID_19Analyse.models import Country, CountryData

from COVID_19Analyse.tools.datetimeSupport import TimeTools
from COVID_19Analyse.tools.DataSpider import DataSpider

def hourUpdate():

    print("----------------更新今日数据----------------")
    print(datetime.datetime.today().strftime("%Y-%m-%d %H:%M"))
    countries = Country.objects.all()
    countryDateDictList = []
    for country in countries:
        # 开始时间为昨天
        dictTmp = {country.name: TimeTools.getYesterday()}
        countryDateDictList.append(dictTmp)
    spider = DataSpider()
    ans = spider.update(countryDateDictList)
    cnt = 0
    for key in ans:
        countryObject = Country.objects.get(name=key)
        for data in ans[key]:
            dataObject = countryObject.countrydata_set.get(date=data["date"])

            dataObject.confirm_add = data["confirm_add"]
            dataObject.confirm = data["confirm"]
            dataObject.heal = data["heal"]
            dataObject.dead = data["dead"]

            dataObject.save()
            cnt += 1

    print("{:<12} {}条数据已更新".format(TimeTools.getToday().strftime("%Y-%m-%d"),cnt))
    print("-----------------更新结束-----------------")
    print()

4.在 settings.py中的最后增加

# 定时函数
CRONJOBS = [
('*/3 * * * *', 'EndProject.update1day.hourUpdate','>>/Users/chen/PycharmProjects/EndProject/EndProject/log/hourUpdate.txt'),
('0 */32 * * *', 'EndProject.update2day.dailyUpdate','>>/Users/chen/PycharmProjects/EndProject/EndProject/log/dailyUpdate.txt'),
]

如果你有多个定时任务,都放入CORJOBS中即可, 

需要说明的是, 

‘*/3 * * * *’ 遵循的是crontab 语法。

第二个参数:‘appname.cron.test’,这个appname就是你开发时加入到settings中的那个。(我的就是:“EndProject. update1day.hourUpdate”)

因为你的cron.py文件就在这个下面,否则找不到路径。cron 就是你自己起的任务文件的名字。test就是执行的函数中的内容。

‘>>/home/test.log’,通常会输出信息到一个文件中,就使用这个方法,注意的是‘>>’表示追加写入,’>’表示覆盖写入。

时间计算可以参考:crontab时间计算

以上都完成后,需要执行 

python manage.py crontab add 

将任务添加并生效

 

显示当前的定时任务 

python manage.py crontab show

删除所有定时任务 

python manage.py crontab remove

 

然后重启django服务。 

执行 

crontab -e 

可以看到系统中创建了该定时任务。 

说到底,只是django-crontab插件对linux底层的调用,这个方法在windows 上不生效。

各种路径一定要确保正确,否则较难排查错误。

结果如下:

 

上述命令在终端输入!!!我这里是用的pycharm的终端,如果不是pycharm需要cd到与manage.py同级的目录下,执行这些命令。
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值