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同級的目錄下,執行這些命令。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章