游戏服务器之角色数据管理工具(python版)

本文介绍了一个使用Python编写的图形化工具,用于方便非程序员管理游戏服务器的MySQL和Redis角色数据。工具利用wx图形库和ORM技术,提供角色数据的查询和删除功能。通过会话方式操作MySQL数据库,并实现角色数据的校验与一致性检查,将结果写入文件。
摘要由CSDN通过智能技术生成

之所以要做个工具,是方便非程序人员也可以容易操作和管理数据库,进而可以管理游戏程序。

使用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


tab_t_juese_wupin = Table("t_juese_shuju", metadata,
    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():
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值