#coding:utf-8 import os import time import datetime import sys import django import common.common_control as ccc from django.db import connection sys.path.append('/mnt/wzbapi/src') os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' django.setup() import common.models as cm def update_group_rank(stock_date=None): """ """ ccc.cache.delete("cdata_*") if stock_date: stock_date = stock_date else: stock_date = datetime.datetime.now().strftime("%Y-%m-%d") ccc.cache.delete("*_"+stock_date) groups = cm.MatchGroup.objects.all() for gp in groups: match_id = gp.match_id match_group = gp.id delkey = "*_%s_%s_%s" % (match_id,match_group,stock_date) del_keys = ccc.cache.keys(delkey) ccc.cache.delete(*del_keys) prset = cm.PlayerRecord.objects.filter(match_id=match_id,match_group=match_group,stock_date=stock_date).order_by("-total_income") if prset: records = prset.values() case_id = " case id " cases = [] where = [] for index,pr in enumerate(prset): case = "WHEN %s THEN %s" % (pr.id,index+1) cases.append(case) where.append(str(pr.id)) # key = "%s_%s_%s_%s" % (pr.player_id,match_id,match_group,stock_date) record = records[index] record.update({"group_rank":index+1}) ccc.pl.set(key,json.dumps(record,cls=ccc.CusJSONEncoder)) ccc.pl.execute() case = case_id + " ".join(cases) where = ",".join(where) sql = "update player_record set group_rank = %s ELSE 0 END where id in (%s)" % (case,where) cursor = connection.cursor() cursor.execute(sql) cursor.close() if __name__ == "__main__": print "start update group rank..." st = time.time() update_group_rank() print "time cost:",time.time()-st