之所以要做个工具,是方便非程序人员也可以容易操作和管理数据库,进而可以管理游戏程序。
使用python作为工具是python容易写图形工具,而原来的项目也用到python作为逻辑脚本。
1、python 的一个第三方库wx图形支持
2、mysql角色数据管理
3、redis角色数据管理
1、python 的一个第三方库wx图形支持
python 的一个第三方库wx可以提供一些图形支持,支持事件循环和响应。
if __name__ == "__main__":
import sys
reload(sys)
sys.setdefaultencoding('utf8')#设置编码
#app = wx.PySimpleApp(True, 'log.txt')
app = wx.PySimpleApp()#创建一个应用程序,wx.PySimpleApp
frame = MainFrame(None)#MainFrame(wx.Frame)
gSetMainframe(frame)
frame.Show()
app.MainLoop()#开始图形事件循环
管理工具以一个标签页来作为工具的一部分而存在。
检查页的ui是一个wx.Panel : class VerifyDataUI(wx.Panel)
功能是查询、删除redis和mysql的角色数据。
2、mysql角色数据管理
(1)mysql数据访问
首先需要说明的是mysql的查询用到orm的技术(对象关系映射,使用到的第三方库是sqlalchemy),而角色表的orm内容如下:
含有角色id、角色背包(二进制)、角色商城背包(二进制)、角色仓库(二进制)、角色技能(二进制)。
#导入sqlalchemy 的类和类型
from sqlalchemy import Table, Column
from sqlalchemy.dialects.mysql import TINYINT, SMALLINT, INTEGER, BIGINT, \TEXT, CHAR, VARCHAR, FLOAT, DATETIME, MEDIUMTEXT, BLOB
from sqlalchemy.orm import Mapper
from core.db.connect import metadata, TableObject
#类Tjuese_shuju映射的是mysql里的表t_juese_shuju。
#映射的方式是通过sqlalchemy.orm 的类 Mapper
Column("jue_se", INTEGER, primary_key = True), # 角色id
Column("b_beibao", BLOB), # 角色背包
Column("b_cangku", BLOB), # 角色商城背包
Column("b_shangcheng_beibao", BLOB), # 角色仓库
Column("b_jineng", BLOB) # 角色技能
)
class Tjuese_shuju(TableObject):
COL_NAMES = ['jue_se', 'b_beibao', 'b_cangku', 'b_shangcheng_beibao',
'b_jineng']
TABLE_NAME = 't_juese_shuju'
ROW_INDEX = ['jue_se']
def __init__(self):
TableObject.__init__(self)
def get_name(self):
return Tjuese_shuju.TABLE_NAME
def get_col_names(self):
return Tjuese_shuju.COL_NAMES
def get_key_names(self):
return Tjuese_shuju.ROW_INDEX
def session_obj_copy(self,obj):#拷贝orm对象
self.__dict__ = dict(obj.__dict__,**self.__dict__)#保留自身的状态成员_sa_instance_state
mapper_t_juese_wupin = Mapper(Tjuese_shuju, tab_t_juese_wupin)
mysql的连接会话。会话的创建是使用sqlalchemy的接口。
@staticmethod
def make_session_class(ip,user,pw,port,database):
try:
print "ip,port,database",ip,port,database
if False == isinstance(port,int):
print "port must be int type"
return None
_connect_str = "mysql://%s:%s@%s:%d/%s?charset=utf8" % (user,pw,ip,port,database)
_engine = create_engine(_connect_str, echo=False)
print _engine.connect()
Session = sessionmaker(bind=_engine, autoflush=False, autocommit=True)
print "Session",Session
return Session
except:
traceback.print_exc()
return None
(2)mysql角色数据管理工具
获取mysql角色数据事件响应函数:
def OnVerifyMysqlOneJuesePackage(self,evt):
juese_id_str = self.ctl_mysql_juese_id.GetValue()
juese_id_str = juese_id_str.replace(" ", "")
juese_name_str = ""
if "" == juese_id_str:
juese_name_str = self.ctl_mysql_juese_name.GetValue()
juese_name_str = juese_name_str.encode("utf8")
juese_name_str = juese_name_str.replace(" ","")
if "" == juese_id_str and "" == juese_name_str:
title = u"请输入关键字(角色id或角色名)"
self.show_warnning(title)
return
juese_id = -1
if "" != juese_id_str:
try:
juese_id = int(juese_id_str)
if 0 >= juese_id:
title = u"角色id需要是正数"
self.show_warnning(title)
return
except:
title = u"角色id需要是数字"
self.show_warnning(title)
return
try:
ret = Consistency.check_one_juese_beibao(juese_id,juese_name_str)
if -1 == ret:
title = u"该角色数据为空"
self.show_warnning(title)
elif -2 == ret:
title = u"校验出错"
self.show_warnning(title)
elif -3 == ret:
title = u"数据库为连接或连接出错"
self.show_warnning(title)
else:
title = u"校验成功,请查看juese_beibao_check文件"
self.show_warnning(title)
except:
traceback.print_exc()
title = u"检查角色背包出错"
self.show_warnning(title)
通过会话把检查的角色数据写到文件里
检查所有角色数据,获取所有角色的背包数据,并以json的格式写入到文件中。
@staticmethod
def check_juese_beibao():