码迷,mamicode.com
首页 > 编程语言 > 详细

pycode:pubwin会员合并的python实现

时间:2014-10-11 17:17:35      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   使用   ar   文件   

前段时间写的pubwin会员合并程序

文字版本的请查看 http://www.cnblogs.com/sprite/p/3477734.html

#-*-coding:gbk-*-

# pubwin member repare tools
# change member level by score
# code by sprite


import pymssql
import _mssql
import uuid
import decimal
import os
from time import sleep

def 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 0

def 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实现

标签:style   blog   http   color   io   os   使用   ar   文件   

原文地址:http://www.cnblogs.com/sprite/p/4019198.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!