使用openpyxl 操作Excel文件导出导入数据

  1. 把Excel文件的数据,导入进数据库

# coding=utf-8
import pymysql
from openpyxl import load_workbook
# 把Excel,格式是xlsx数据导入到数据库

def getdata(sqllist, dbname):  # 根据sql语句,执行sql
    conn = pymysql.connect(host='192.168.1.53', user='user', password='pwd', database=dbname,
                           port=3306, charset="utf8")
    cur = conn.cursor()
    for sql in sqllist:
        cur.execute(sql)
    conn.commit()
    results = cur.fetchall()
    cur.close()
    conn.close()
    return results


def importdata(filename, dbname, sql):  # 读取Excel文件,返回insert语句
    wb = load_workbook(filename)  # 加载Excel文件
    ws = wb.active  # 获取第1个sheet,或者用ws = wb.worksheets[0] 根据工作表索引获取工作表。ws=wb['courier'] 根据工作表名称获取sheet
    # cols = ws.max_column  # 获取sheet总列数
    # rows = ws.max_row  # 获取sheet总行数
    # for row in range(2, rows + 1):  # 从第2行开始获取每行数据
    #   print(ws[row])
    #   for i in ws[row]:
    #       print(i.value)

    sqllist = []
    for value in ws.values:  # 输出所有数据,value是tuple类型,ws.values 是generator生成器类型
        insertsql = sql + str(value)
        sqllist.append(insertsql)
    wb.close()  # 读完数据关闭Excel
    insert_to_db = getdata(sqllist, dbname)
    return


if __name__ == '__main__':
    filename = '/Users/yuz/Documents/pyfiles/task.xlsx'  # 文件位置
    dbname = 'dbname'  # 数据库名
    sql = "insert into kpi_data (member_id,member_name,team_id,leader_id,leader_name,city_id,city_name) values "
    importdata(filename, dbname ,sql)
    print("done")
  1. 从数据库中,导出数据到Excel文件

import pymysql
from openpyxl import Workbook
# 从数据库中导出数据到Excel,格式是xlsx
def getdata(sql, dbname):  # 根据sql语句,获取数据库的数据
    conn = pymysql.connect(host='192.168.1.53', user='user', password='pwd', database=dbname,
                           port=3306, charset="utf8")
    cur = conn.cursor()
    cur.execute(sql)
    conn.commit()
    results = cur.fetchall()
    cur.close()
    conn.close()
    return results


def writedata(filename, dbname, sql):  # 把数据写入Excel文件
    wb = Workbook()  # 创建文件对象
    ws = wb.active  # 激活第1个sheet
    wstitle = ["trans_no", "user_id", "remark", "city"]  # 表头
    ws.append(wstitle)  # 先写表头
    datas = getdata(sql, dbname)  # 从库里取出数据
    for row in datas:  # 每次写入一行数据
        row = list(row)
        ws.append(row)
    wb.save(filename)  # 保存


if __name__ == '__main__':
    filename = '/Users/yuz/Documents/pyfiles/datas.xlsx'
    dbname = 'trade8'
    sql = "SELECT trans_no,user_id,remark,city FROM withdraw_trades where account_type in (1,2)"
    writedata(filename, dbname, sql)

  1. 从数据库中导出数据到txt文件

# coding=utf-8
import pymysql

def getdata(sql, dbname):  # 根据sql语句,获取数据库的数据
    conn = pymysql.connect(host='192.168.1.53', user='user', password='pwd', database=dbname,
                           port=3306, charset="utf8")
    cur = conn.cursor()
    cur.execute(sql)
    conn.commit()
    results = cur.fetchall()
    cur.close()
    conn.close()
    return results


def file_edit(wr_str): #写入txt文件,文件不存在则创建.
    f1 = open(r'/Users/yuz/Documents/pyfiles/ids.txt', 'a')
    f1.write(wr_str)
    f1.close()


if __name__ == "__main__":
    sql = "SELECT user_id FROM `couriers` ORDER BY id ASC LIMIT 20"
    ids = getdata(sql,'co1')
    for i in range(0, len(ids)):
        file_edit(str(ids[i][0]) + "," + "\n")
    print("done")

  1. 使用ssh方式连接数据库

# -*- coding:utf-8 -*-
import conf
import pymysql
from sshtunnel import SSHTunnelForwarder

def get_data(env,sql):  # 根据sql语句,获取数据库的数据
    '''
    返回的数据类型为嵌套tuple,长度是sql的查询数据条数
    (('第1条数据字段1的值','第1条字段2的值'), ('第2条数据字段1的值','第2条数据字段2的值'))
    '''
    dbhost = conf.dbconfigs[env]['host']
    uname = conf.dbconfigs[env]['user']
    passwd = conf.dbconfigs[env]['passwd']

    with SSHTunnelForwarder(
            ("192.168.1.12", 22),
            ssh_username="username",
            ssh_pkey="/Users/yuz/Desktop/id_rsa.dat",
            # ssh_private_key_password="secret",
            remote_bind_address=(dbhost, 3306),
            local_bind_address=('0.0.0.0', 10022)
    ) as tunnel:
        conn = pymysql.connect(host='127.0.0.1',
                               port=10022,
                               user=uname,
                               passwd=passwd)

        cur = conn.cursor()
        cur.execute(sql)
        results = cur.fetchall()
        cur.close()
        conn.close()
        return results
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhizunyu2009

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值