如何解决数据库没有被在 celery beat 中运行的任务更新
您好,我有一个 celery 任务,假设每 1 小时运行一次以获取密钥,它运行时甚至表现得好像更新了数据库,但实际上并没有更新
@app.task
def refresh_token():
r = requests.get(AUTH_URL,auth=HTTPBasicAuth(CONSUMER_KEY,CONSUMER_SECRET))
obj = json.loads(r.text)
obj['expires_in'] = int(obj['expires_in'])
try:
mpesa_token = mpesaAccesstoken.objects.get(id=1)
mpesa_token.access_token = obj['access_token']
mpesa_token.save()
print(obj)
print(mpesa_token.access_token)
print("saved")
except:
print(obj)
mpesa_token = mpesaAccesstoken.objects.create(**obj)
return 1
最后你打印日志中的所有显示,但检查管理面板,但当我使用视图并发出请求然后调用该函数时,这些值没有更新,数据库得到更新,任何人都知道发生了什么
解决方法
您需要将 transaction.atomic()
添加到您的代码中。像这样:
from django.db import transaction
@app.task
def refresh_token():
with transaction.atomic():
r = requests.get(AUTH_URL,auth=HTTPBasicAuth(CONSUMER_KEY,CONSUMER_SECRET))
obj = json.loads(r.text)
obj['expires_in'] = int(obj['expires_in'])
try:
mpesa_token = MpesaAccessToken.objects.get(id=1)
mpesa_token.access_token = obj['access_token']
mpesa_token.save()
print(obj)
print(mpesa_token.access_token)
print("saved")
except:
print(obj)
mpesa_token = MpesaAccessToken.objects.create(**obj)
return 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。