celery中操作MySQL
阿新 • • 發佈:2021-10-20
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