首页 > 代码库 > pycode:pubwin会员合并的python实现
pycode:pubwin会员合并的python实现
前段时间写的pubwin会员合并程序
文字版本的请查看 http://www.cnblogs.com/sprite/p/3477734.html
#-*-coding:gbk-*-# pubwin member repare tools# change member level by score# code by spriteimport pymssqlimport _mssqlimport uuidimport decimalimport osfrom time import sleepdef getpath(): #获取当地程序所在目录 return os.path.abspath(‘.‘) def dbtest(dbpasswd): #检查数据库是否可以登录 cmd="osql -U netcafe -P "+dbpasswd+" -Q "+"\""+ ""+"\"" a=os.system(cmd) return a def databasecon(passwd=‘123456‘): #返回数据库连接字串 try: con=pymssql.connect(host=‘.‘,user=‘netcafe‘, password=passwd,database=‘local‘) except: return 0 return con def dbattach(opr=1,dbpasswd=‘123456‘): #1 附加程序目录下的local_db.mdf文件数据库,0表示成功 #opr=0 表示分离souredb path=getpath() dbmdfpath=path+‘\\‘+‘local_Data.MDF‘ dbldfpath=path+‘\\‘+‘local_log.LDF‘ if opr==1: cmd="osql -U netcafe -P "+dbpasswd+" -Q "+"\""+ "sp_attach_db @dbname=‘souredb‘,@filename1="+ "‘"+dbmdfpath+"‘,"+"@filename2="+"‘"+dbldfpath+"‘"+"\"" else: cmd="osql -U netcafe -P "+dbpasswd+" -Q "+"\""+ "sp_detach_db @dbname=‘souredb‘"+"\"" a=os.popen(cmd) aline=a.readlines() if len(aline)==0: return 0 else: return 1 def creatmembertable(dbpassword): #将soure库里的会员库提取到local库新建的member表里,soredb库必须附加成功才能合并 #isplus为Y时合并相同会员金额,为N时直接删除相同卡号会员 con=databasecon(dbpassword) if con==0:return 0 try: cur=con.cursor() cur.execute("select * into local.dbo.member from souredb.dbo.mem_localmemberbaseinfo") con.commit() except: con.close() return 0 con.close() return 1 def getmaxidinlocalmember(password): #获得local表最大id,后面的加id可以精准添加,以免报id唯一性错误 con=databasecon(password) if con==0:return 0 cur=con.cursor() cur.execute(‘select max(id) from mem_localmemberbaseinfo‘) a=cur.fetchall() con.close() if a[0][0]>0: return a[0][0] return 0def memberblanceplus(dbpassword): con=databasecon(dbpassword) plussql=‘update mem_localmemberbaseinfo set balance=mem_localmemberbaseinfo.balance+a.balance, score=mem_localmemberbaseinfo.score+a.score from member as a where mem_localmemberbaseinfo.uniqueid=a.uniqueid‘ if con==0:return 0 try: cur=con.cursor() cur.execute(plussql) con.commit() except: con.close() return 0 con.close() return 1 def memberjoin(dbpassword): con=databasecon(dbpassword) if con==0:return 0 maxid=(getmaxidinlocalmember(dbpassword)) delsql=‘delete member where uniqueid in (select uniqueid from mem_localmemberbaseinfo)‘ idplussql=‘update member set id=id+‘+str(maxid) insql=‘insert into mem_localmemberbaseinfo (level,levelid,realname,balance,score,updatetm,location, certificateid,sex,birthday,country,password,validtm,opentm,certificatetype,id,uniqueid) select level,levelid,realname,balance,score,updatetm,location, certificateid,sex,birthday,country,password,validtm,opentm,certificatetype,id,uniqueid from member‘ try: cur=con.cursor() cur.execute(delsql) if maxid != 0:cur.execute(idplussql) cur.execute(insql) con.commit() except: con.close() return 0 con.close() return 1 def dropmembertable(dbpassword): con=databasecon(dbpassword) if con==0:return 0 dropsql=‘drop table member‘ try: cur=con.cursor() cur.execute(dropsql) con.commit() except: con.close() return 0 con.close() return 1 def initpro(): os.system("cls") print ‘‘ print "*"*55 print " pubwin会员合并程序 " print "*"*55 print "" print " 合并前请先停止pubwin服务,启动数据库服务" print "请将要合并数据文件local_Data.MDF,local_log.LDF放在程序目录下" print " 合并前请备份数据库,合并不成功请换回原来库" print ‘‘ print ‘*‘*55 print "\n" print "请输入数据库密码"while 1: initpro() dbpasswd=raw_input() if dbtest(dbpasswd)==0: print "数据库连接成功" break else: print "数据库连接失败" sleep(2)attach=dbattach(1,dbpasswd)if attach!=0: #返回值有问题,不管成功不成功都会返回0,用别的方法判断 print ‘x‘*30 print "要合并的数据库无法附加\n请将数据文件local_Data.MDF, local_log.LDF放在程序目录下\n程序将自动退出" print ‘x‘*30 sleep(3) exit()ismembertables=creatmembertable(dbpasswd)if ismembertables==0: print "源库会员表无法提取或是网吧数据库错误\n程序将自动退出" attach=dbattach(0,dbpasswd) sleep(3) exit()print "源库会员库数据提取成功"attach=dbattach(0,dbpasswd)while 1: print "*"*30 print "同卡号会员金额是否相加,(Y/N)" isplus=raw_input() if isplus ==‘Y‘ or isplus ==‘N‘:break if isplus==‘Y‘: isplussuccess=memberblanceplus(dbpasswd) if isplussuccess==0: print ‘会员金额相加失败,程序将自动退出‘ sleep(3) exit() print ‘会员金额相加成功‘print ‘开始合并数据库‘if memberjoin(dbpasswd)==0: dropmembertable(dbpasswd) print ‘会员合并失败,程序将自动退出‘ sleep(3) exit()dropmembertable(dbpasswd)print ‘合并成功,请勿重复操作‘print ‘‘print ‘press any key to exit‘os.system("pause>>null")
已经使用py2exe打包,下载地址:http://pan.baidu.com/s/1dD2AVi5
用法:
需求:将B网吧会员合并到A网吧正在用的数据库里
1,将A网吧所有会员下机,停止pubwin服务,备份数据库,然后启动slqserver
2,将B网吧数据库放入程序同一目录下(目录最好不要有中文)
3,运行pubwindbmemjoin.exe,根据程序步骤操作
4,如果会员等级不对应,需要在操作后手工修改
如果合并时程序报错或无故退出,请将数据库替换为原来的库手工合并
PS:如果报程序配置失败,或是报应用程序无法正常初始化0xc0000135错误的话 需要安装 vc++2008运行库
运行库已经在压缩包里了
update:
1.0 完成程序基本功能,附加新库,合并金额,合并会员
1.1 添加一个判断会员id大小的函数,可以在插入会员新库会员时使会员id精准增加,不会出现id唯一性错误
下载地址:http://pan.baidu.com/s/1dD2AVi5
用法:
需求:将B网吧会员合并到A网吧正在用的数据库里
1,将A网吧所有会员下机,停止pubwin服务,备份数据库,然后启动slqserver
2,将B网吧数据库放入程序同一目录下(目录最好不要有中文)
3,运行pubwindbmemjoin.exe,根据程序步骤操作
4,如果会员等级不对应,需要在操作后手工修改
如果合并时程序报错或无故退出,请将数据库替换为原来的库手工合并
PS:如果报程序配置失败,或是报应用程序无法正常初始化0xc0000135错误的话 需要安装 vc++2008运行库
运行库已经在压缩包里了
update:
1.0 完成程序基本功能,附加新库,合并金额,合并会员
1.1 添加一个判断会员id大小的函数,可以在插入会员新库会员时使会员id精准增加,不会出现id唯一性错误
1.2 修复一个sql语句错误,现在可以正确的导入会员等级id字段了
pycode:pubwin会员合并的python实现