celery中操作MySQL

celery中操作MySQL

# celery中操作MySQL,有2种方案:
1.使用原生的sql语句
2.使用django的ORM(推荐)

1.使用原生的sql语句(不推荐)

# 注意事项:
1.连接数据库的代码一定要放到任务里面去,不然会出错,老刘说:“放任务外面,celery一运行,就会创建链接,以后用的都是这个链接,会出内存溢出”
2.这种方式任务执行前都要连接数据库,很慢,一个任务60s,不推荐      (******)


@app.task()
def set_not_free(id):
    conn = pymysql.connect(
        host="localhost",
        port=3306,
        user='root',
        passwd='root123',
        database='xiaoheihe',
        charset='utf8',
        autocommit=True  # 修改默认设置,使增,改,查,自动进行2次确认
    )

    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)  # 默认查看数据时是元组格式,手动改为字典模式
    sql = 'UPDATE game_game SET is_free = 0 WHERE id = %s' % id
    cursor.execute(sql)
    cursor.close()
    return True
# 错误解析:连接数据库的代码放到任务外面,导致:
1.celery任务一直失败,或大概率失败
2.worker启动非常慢

2.使用django的ORM(推荐)

# 注意事项:
1.推荐这种方式,简单,执行效率高

import os
import django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'youxihe.settings.dev')
django.setup()  					# 前4句引入django测试环境
from apps.game.models import Game

@app.task()
def set_free(id):
    Game.objects.filter(id=id).update(is_free=True)
    return True
posted @ 2021-10-20 21:21  hai437  阅读(1018)  评论(0编辑  收藏  举报