111 lines
4.0 KiB
Python
111 lines
4.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
#!/usr/bin/python
|
|
|
|
import os
|
|
import sys
|
|
import time
|
|
import json
|
|
import redis
|
|
import pymysql
|
|
import datetime
|
|
import pprint
|
|
import _utils
|
|
from string import Template
|
|
|
|
class Combine:
|
|
|
|
def __init__(self):
|
|
self._rule_conf = _utils.readCombineRule()
|
|
self._server_list_conf = _utils.readServerListConf()
|
|
self._main_serverid = self._server_list_conf[0]['serverid']
|
|
self._curr_serverid = 0
|
|
self._main_server_arena_max_rank = 0
|
|
self._role_arena_rank_list = []
|
|
|
|
def run(self):
|
|
_utils.checkDB(self._server_list_conf, self._rule_conf)
|
|
self._convertDB()
|
|
|
|
def _convertDB(self):
|
|
for conf in self._server_list_conf:
|
|
conn = pymysql.connect(host = conf['db_host'],
|
|
port = conf['db_port'],
|
|
user = conf['db_user'],
|
|
passwd = conf['db_passwd'],
|
|
db = 'legend_' + str(conf['serverid']),
|
|
charset = 'utf8'
|
|
)
|
|
assert conn
|
|
self._curr_serverid = conf['serverid']
|
|
for rule in self._rule_conf.values():
|
|
fetch_sql = self._replaceSqlTemplate(rule['fetch_sql'])
|
|
print(fetch_sql)
|
|
cursor = conn.cursor(cursor = pymysql.cursors.DictCursor)
|
|
cursor.execute(fetch_sql)
|
|
rows = cursor.fetchall()
|
|
self._writeSql(conn, rule, rows)
|
|
self._oneRulePostProc(conn, rule, rows)
|
|
#end for rule
|
|
self._rulePostProc(conn, rule)
|
|
self._appendSql()
|
|
|
|
def _writeSql(self, conn, rule, rows):
|
|
# file_name = 'out/' + rule['table_name'] + '.sql'
|
|
file_name = 'out/all.sql'
|
|
with open(file_name, 'a+') as out_file:
|
|
for row in rows:
|
|
assert len(row) > 0
|
|
field_names = ''
|
|
field_values = ''
|
|
for key in row.keys():
|
|
field_names += '`%s`,' % key
|
|
if row[key] == None:
|
|
field_values += 'null,'
|
|
else:
|
|
field_values += '"%s",' % pymysql.escape_string(str(row[key]))
|
|
#end for key
|
|
insert_sql = 'INSERT INTO ' + rule['table_name'] + '(' + field_names[0:-1] + ')' + \
|
|
' VALUES (' + field_values[0:-1] + ");\n"
|
|
out_file.write(insert_sql)
|
|
#end for row
|
|
|
|
def _appendSql(self):
|
|
file_name = 'out/all.sql'
|
|
with open(file_name, 'a+') as out_file:
|
|
out_file.write("UPDATE tribe_member SET position=5;\n")
|
|
curr_rank = self._main_server_arena_max_rank + 1
|
|
for row in self._role_arena_rank_list:
|
|
out_file.write("UPDATE role_arena SET rank=%d where role_id=%d;\n" % (curr_rank, row['roleid']))
|
|
curr_rank += 1
|
|
|
|
def _replaceSqlTemplate(self, sql):
|
|
str_tpl = Template(sql)
|
|
tmp_str = sql
|
|
tmp_str = tmp_str.replace('${main_server_id}', str(self._main_serverid))
|
|
tmp_str = tmp_str.replace('${curr_server_id}', str(self._curr_serverid))
|
|
return tmp_str
|
|
#return str_tpl.safe_substitute({
|
|
# 'main_serverid': self._main_serverid,
|
|
# 'curr_serverid': self._curr_serverid
|
|
#})
|
|
|
|
def _oneRulePostProc(self, conn, rule, rows):
|
|
if rule['table_name'] == 'role_arena':
|
|
for row in rows:
|
|
if self._main_serverid == self._curr_serverid:
|
|
if row['rank'] > self._main_server_arena_max_rank:
|
|
self._main_server_arena_max_rank = row['rank']
|
|
#end for row
|
|
else:
|
|
self._role_arena_rank_list.append(
|
|
{
|
|
'roleid' : row['role_id'],
|
|
'old_rank' : row['rank']
|
|
})
|
|
|
|
def _rulePostProc(self, conn, rule):
|
|
pass
|
|
|
|
combine = Combine()
|
|
combine.run()
|