python 学习数据库EXCEL处理

Posted hyw45

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 学习数据库EXCEL处理相关的知识,希望对你有一定的参考价值。

1.python自带数据库,此处使用MYSQL数据库,编写数据库类做数据库处理,编写excel 类处理excel的读写,下面代码可以实现从excel读取数据写入数据库,从数据库读取数据写入excel: 

import xlrd,xlwt
import pymysql

class Mysql:
    def __init__(self):
        self.content = pymysql.Connect(
            host=192.168.207.63,  # mysql的主机ip
            port=32774,  # 端口
            user=root,  # 用户名
            passwd=123456,  # 数据库密码
            db=test,  # 数据库名
            charset=utf8,  # 字符集
        )
        self.cursor = self.content.cursor()

    def query(self):
        sql = "select grade,teacher,location from grade;"
        self.cursor.execute(sql)        
        for row in self.cursor.fetchall():
            print("grade:%s	 teacher:%s	 location:%s" % row)
            rows.append(row)
        print(f"一共查找到:{self.cursor.rowcount}")          
        
    def readtable(self):
        sql = """select * from stu;"""
        self.cursor.execute(sql)
        rows= []
        for row in self.cursor.fetchall():
            print(row)
            rows.append(row)
        print(f"一共查找到:{self.cursor.rowcount}")  
        return rows


    def insert(self,grade,teacher,location):
        sql = """INSERT INTO grade(grade,teacher,location) VALUES(%s,%s,%s)"""
        values=(int(grade),str(teacher),str(location))        
        try:
            self.cursor.execute(sql,values)
            self.content.commit()
           # print("插入成功")
        except:
            self.content.rollback
           # print("插入失败")
           
    def end(self):
        self.cursor.close()
        self.content.close()

class Exceltable:
    def __init__(self):
        self.book = xlrd.open_workbook("grade.xls")  #文件名,把文件与py文件放在同一目录下
        self.sheet = self.book.sheet_by_name("Sheet1")   #execl里面的worksheet1    
        
    def readrow(self,row):
        #ctype: 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
        row_values = []
        for i in range(self.sheet.ncols):
            cell=self.sheet.cell_value(row,i)
            ctype = self.sheet.cell(row,i).ctype
            if ctype == 2 and cell%1== 0:
                cell =int(cell)
            elif ctype == 3:
                # 转成datetime对象
                date = datetime(*xldate_as_tuple(cell, 0))
                cell = date.strftime(%Y/%d/%m %H:%M:%S)
            elif ctype == 4:
                cell = True if cell == 1 else False
            row_values.append(cell)
        return row_values        

    def readall(self):
        #ctype: 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
        all_content = []
        for i in range(1,self.sheet.nrows):
            row_values = []            
            for j in range(self.sheet.ncols):
                cell=self.sheet.cell_value(i,j)
                ctype = self.sheet.cell(i,j).ctype
                if ctype == 2 and cell%1== 0:
                    cell =int(cell)
                elif ctype == 3:
                    # 转成datetime对象
                    date = datetime(*xldate_as_tuple(cell, 0))
                    cell = date.strftime(%Y/%d/%m %H:%M:%S)
                elif ctype == 4:
                    cell = True if cell == 1 else False
                row_values.append(cell)
            all_content.append(row_values)
        return all_content 
        
    def readmutirow(self,start,end):
        muti_content = []
        for i in range(start,end+1):
            row_values = []            
            for j in range(self.sheet.ncols):
                cell=self.sheet.cell_value(i,j)
                ctype = self.sheet.cell(i,j).ctype
                if ctype == 2 and cell%1== 0:
                    cell =int(cell)
                elif ctype == 3:
                    # 转成datetime对象
                    date = datetime(*xldate_as_tuple(cell, 0))
                    cell = date.strftime(%Y/%d/%m %H:%M:%S)
                elif ctype == 4:
                    cell = True if cell == 1 else False
                row_values.append(cell)
            muti_content.append(row_values)
        return muti_content   

    def writrow(self,rows):
        # 创建Excel工作薄
        myWorkbook = xlwt.Workbook()
        # 3. 添加Excel工作表
        mySheet = myWorkbook.add_sheet(test)
        # 4. 写入数据
        #myStyle = xlwt.easyxf(‘font: name Times New Roman, color-index red, bold on‘, num_format_str=‘#,##0.00‘)   #数据格式
        for i in range(len(rows)):
            for j in range(len(rows[i])):
                mySheet.write(i, j, rows[i][j])                          #写入A3,数值等于1
        #5. 保存
        myWorkbook.save(Wtest.xls)
    
if __name__ == __main__:
    mysql = Mysql()    
    myexcel=Exceltable()
    
    #读单行
    #cells=myexcel.readrow(3)
    #print(cells)
    
    #读整个表
    #all_content = myexcel.readall()
    #for cells in all_content:
    #    print(cells)
    #    mysql.insert(cells[0],cells[1],cells[2])
    
    #读指定表
    #muti_content=myexcel.readmutirow(1,3)
    #for cells in  muti_content:
    #    print(cells)
    #    mysql.insert(cells[0],cells[1],cells[2])
    
    #查询数据库
    #mysql.query()
    #将数据库内容写入EXCEL
    rows=mysql.readtable()    
    myexcel.writrow(rows)
    mysql.end()

上面程序存在缺陷:1.处理数据量小,不适合大量数据处理,2.使用xlwt库写excel只支持.xls且仅支持新建,后续学习PANDAS后补充此章内容

以上是关于python 学习数据库EXCEL处理的主要内容,如果未能解决你的问题,请参考以下文章

《对比Excel,轻松学习Python数据分析》

Python学习:如何使用pandas分析excel数据

python 机器学习有用的代码片段

一日一技:Python + Excel——飞速处理数据分析与处理

在 Python 多处理进程中运行较慢的 OpenCV 代码片段

学习笔记:python3,代码片段(2017)