公司开发游戏的过程中会有很多配置表,如果数据多了更麻烦的是策划更改了数据
数据的导入就成了一件很麻烦的事,所以就写了一个导入数据的类
现在只要根据 数据库中的 表名和文件名 就可以将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()