使用Python / Django每小时更新一次数据库字段

时间:2016-07-09 19:53:10

标签: django python-3.x

假设我在表格中有1000个user_ids,我会每小时运行一次,以获取Google API信息并更新该表格中的3个字段。影响将如何以及如何有效地完成?

我见过这个变种:

m = Module.objects.get(user_id=1).update(field_one=100, field_two=200, field_three=300)

这一个:

m = Module.objects.get(user_id=1)
m.field_one = 100
m.field_two = 200
m.field_three = 300
m.save()

还有怎样才能让它每小时运行一次并获取信息?从来没有做过这样的事情。

2 个答案:

答案 0 :(得分:2)

使用Redis,Celery每小时设置异步任务队列。有关如何为django设置asych任务队列系统的更多信息,请查看https://realpython.com/blog/python/asynchronous-tasks-with-django-and-celery/

以下是tasks.py

的代码
from celery.task import periodic_task
from celery.schedules import crontab  


@periodic_task(run_every=crontab(minute=0, hour='*/1'))
def get_data_from_google_api():
    data_from_google =ping_google_api() # ping google api to get data
    return Module.objects.get(user_id=1).update(field_one= data_from_google['field_one'], field_two= data_from_google['field_two'], field_three= data_from_google['field_three'])

点击此处了解更多信息:

  1. https://www.caktusgroup.com/blog/2014/06/23/scheduling-tasks-celery/
  2. How to run a Django celery task every 6am and 6pm daily?

答案 1 :(得分:1)

为此,您需要定期执行背景查询 这是django task-queue-libs中最受欢迎的 例如,如果您决定使用celery,则可以编写简单的定期任务:

from celery.schedules import crontab
from celery.task import periodic_task

@periodic_task(
name='UPDATE_USER',
run_every=crontab(
    minute='1',
    hour='1,4,7,10,13,16,19,22'))
def update_user():
    #get some value from api
    Module.objects.filter(user_id=1).update(
        field_one=value, field_two=value, field_three=value)

django的所有设置,您可以查看celery docs

相关问题