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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM