zoukankan      html  css  js  c++  java
  • 把读取sql的结果写入到excel文件

    1.利用pandas模块

    # encoding: utf-8
    import time
    import pandas as pd
    import pymysql
    
    def getrel(sql):
        '''
        连接mysql数据库,根据条件查询出来我们所需要数据
        :return: 根据条件从sql查询出来的数据
        '''
        conn = pymysql.connect(host='localhost', user='root', password='123',
                               db='db_test', charset='utf8mb4')
        cur = conn.cursor()
        cur.execute(sql)  # 输入要查询的SQL
        rel = cur.fetchall()
        cur.close()
        conn.close()
        return rel
    
    
    def getxlsx(rel):
        '''
        把从数据库中查询出来的数据写入excel文件
        :param rel:
        :return:
        '''
        file_name = time.strftime('%Y-%m-%d') + '.xlsx'
        dret = pd.DataFrame.from_records(list(rel))  # mysql查询的结果为元组,需要转换为列表
        dret.to_excel(file_name, index=False, header=("平台货号", "商品名称", "售价"))  # header 指定列名,index 默认为True,写行名
    
    
    if __name__ == '__main__':
        sql = 'select goods_commonid,goods_name,goods_price from mall_goods_common where store_id=110 and set_new_time>1560182400;'
        rel = getrel(sql)
        getxlsx(rel)

     2.使用xlwt模块

    import pymysql
    import xlwt
    
    def get_sel_excel(sql):
        '''
        连接mysql并把查询出来的数据写入excel表格
        :param sql:
        :return:
        '''
        conn = pymysql.connect(
            host="localhost",
            port=3306,
            user="root",
            passwd="123",
            db="db_test",
            charset="utf8mb4"
        )
    
        # 建立游标
        cursor = conn.cursor()
        print("开始查询表!")
        # 执行sql语句
        cursor.execute(sql)
        # 获取查询到结果
        res = cursor.fetchall()
        print(res)
        w_excel(res)
    
    
    def w_excel(res):
        '''
        把数据写入excel表格中
        :param res:
        :return:
        '''
        book = xlwt.Workbook()  # 新建一个excel
        sheet = book.add_sheet('vehicle_land')  # 新建一个sheet页
        title = ['平台货号', '商品名称', '售价']
        # 写表头
        i = 0
        for header in title:
            sheet.write(0, i, header)
            i += 1
    
        # 写入数据
        for row in range(1, len(res)):
            for col in range(0, len(res[row])):
                sheet.write(row, col, res[row][col])
            row += 1
        col += 1
        book.save('vehicle_land.xls')
        print("导出成功!")
    
    
    if __name__ == "__main__":
        sql = 'select goods_commonid,goods_name,goods_price from mall_goods_common where store_id=110 and set_new_time>1560182400;'
        get_sel_excel(sql)

     3.pandas 

    import pandas as pd
    from sqlalchemy import create_engine
    
    # 初始化数据库连接,使用pymysql模块
    # MySQL的用户:root, 密码:你的密码, 端口:3306,数据库:trustengine = create_engine("mysql+pymysql://root:password@localhost:3306/trust",encoding='utf-8')
    # 查询语句,选出testexcel表中的所有数据
    sql = """select goods_commonid,goods_name,goods_price from mall_goods_common where store_id=110 and set_new_time>1560182400;"""
    
    # read_sql_query的两个参数: sql语句, 数据库连接
    df = pd.read_sql_query(sql,con=engine)
    
    # 输出testexcel表的查询结果
    print(df)
    
    
    # 创建一个writer对象, 里面的参数是一个新的表格文件名
    writer = pd.ExcelWriter('mydf.xlsx')
    # 利用to_excel()方法将不同的数据框及其对应的sheet名称写入该writer对象中
    df.to_excel(writer,sheet_name='test1',index=False)
    # 数据写出到excel文件中,最后保存
    writer.save()

     4.pandas

    # coding=utf-8
    import pandas as pd
    from pandas import DataFrame
    from sqlalchemy import create_engine
    import time
    
    # 开始时间
    start = time.time()
    # 建立链接
    engine = create_engine('mysql+pymysql://root:123@192.168.148.61:3306/ppx_mall_dev_db')
    # 查询语句
    sql = '''select goods_commonid,goods_name,goods_price from mall_goods_common where store_id=110 and set_new_time>1560182400;'''
    # 读取mysql
    df = pd.read_sql_query(sql, engine)
    print("从mysql中读取数据成功!开始将数据导入到excel表格中...")
    # 将读取的数据格式化成DataFrame类型
    test_data = DataFrame.from_records(df)
    # 将数据写入excle中
    test_data.to_excel("E:\testdata.xlsx", index=False)
    print("导出成功!")
    # 程序结束时间
    end = time.time()
    # 打印出程序的运行时间
    print('Running time: {} Seconds'.format(end - start))

    如需修改表格样式,可参数:https://www.cnblogs.com/phoebechiang/p/10512337.html

  • 相关阅读:
    2019-8-31-C#-控制台使用-UAC-权限
    2019-8-31-C#-控制台使用-UAC-权限
    2018-8-10-WPF-程序生成类库错误
    2018-8-10-WPF-程序生成类库错误
    2018-11-8-WPF-获取下载内容长度
    2018-11-8-WPF-获取下载内容长度
    2018-11-19-win10-uwp-使用-AppCenter-自动构建
    2018-11-19-win10-uwp-使用-AppCenter-自动构建
    Java实现 LeetCode 560 和为K的子数组(某著名排序大法改编)
    Java实现 LeetCode 560 和为K的子数组(某著名排序大法改编)
  • 原文地址:https://www.cnblogs.com/tjp40922/p/11398406.html
Copyright © 2011-2022 走看看