根据数据表导入xls数据

来源:互联网 发布:淘宝质量好的童装店 编辑:程序博客网 时间:2024/06/06 10:56

公司开发游戏的过程中会有很多配置表,如果数据多了更麻烦的是策划更改了数据

数据的导入就成了一件很麻烦的事,所以就写了一个导入数据的类

现在只要根据 数据库中的 表名和文件名 就可以将xls中的数据导入

xls中的数据得根据 表中字段顺序书写

代码中注意的地方也有提到:

#-*-coding:utf-8-*-


import xlrd
from sgLib.pyDB import DBPool,DB

class AddXlsDataToDB():
    '''@summary:将xls表中的数据导入对应数据表中
                xls表中的数据必须根据数据表中各个字段顺序进行书写
    '''
    def __init__(self,table,filename,clear=False,leaveAutoId=True,index=0,rowStart=1):
        '''@param bool clear:是否清空原来数据
           @param bool leaveAutoId:是否添加表的Auto_increment字段
           @param int index:  xls的sheet的index
           @param int rowStart: 从第几行开始
        '''
        self.table = table
        self.filename = filename
        self.clear = clear
        self.leaveAutoId = leaveAutoId
        self.columns = self.getTableColumns()
        self.index = index
        self.rowStart = rowStart
        
    def getDb(self):
        c = DBPool()
        con = c.createCon()
        db = DB(con)
        return db
    
    def getTableColumns(self):
        db = self.getDb()
        columns = []
        try:
            db.cursor.execute('SHOW COLUMNS FROM %s'%self.table)
        except Exception,e:
            print e
        cInfos = db.fetchall()
        for cDict in cInfos:
            if not self.leaveAutoId and cDict['Extra']==u'auto_increment':#不用添加表的Auto_increment字段
                continue
            columns.append(cDict['Field'])
        return columns
    
    def getWorkbook(self,filename):
        try:
            wk = xlrd.open_workbook(filename)
        except Exception,e:
            wk = None
            print e
        return wk
    
    def startAdd(self):
        wk = self.getWorkbook(self.filename)
        sheet = wk.sheet_by_index(self.index)
        num = sheet.nrows
        db = self.getDb()
        if self.clear:
            db.delete(self.table, '1') #清空原来数据
        writeData = {}
        for i in xrange(self.rowStart,num):
            rowValues = sheet.row_values(i)
            for j,field in enumerate(self.columns):
                writeData[field] = rowValues[j]
            
            try:
                #插入数据
                db.insert(self.table,writeData)
            except Exception,e:
                print '%s failed!' %i
            print '%s succeed' %i

def _test():
    table = 'tb_name'
    filename = u'file/配置表.xls'
    a = AddXlsDataToDB(table,filename,clear=True)
    a.startAdd()

if __name__ == "__main__":
    _test()
原创粉丝点击