1. 程式人生 > 其它 >celery中操作MySQL

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