wjtx/tools/combine_db/script/combine_db.py
2020-03-09 19:14:59 +08:00

80 lines
2.7 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
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 = conf['db_database'],
charset = 'utf8'
)
assert conn
self._curr_serverid = conf['serverid']
for rule in self._rule_conf.values():
fetch_sql = self._replaceSqlTemplate(rule['fetch_sql'])
cursor = conn.cursor(cursor = pymysql.cursors.DictCursor)
cursor.execute(fetch_sql)
rows = cursor.fetchall()
self._writeSql(conn, rule, rows)
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")
def _replaceSqlTemplate(self, sql):
str_tpl = Template(sql)
return str_tpl.safe_substitute({
'main_serverid': self._main_serverid,
'curr_serverid': self._curr_serverid
})
combine = Combine()
combine.run()