【Python】pymysql模块处理Mysql数据库

本文详细介绍了使用PyMySQL库在Python环境下对MySQL数据库进行连接、创建表、数据存储及查询等基本操作,并演示了如何将数据库查询结果导出至Excel文件。

PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。
PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。
在使用 PyMySQL 之前,我们需要确保 PyMySQL 已安装,可以直接pip安装:pip install pymysql
本文主要介绍了pymysql连接数据库;删除、创建表;将数据存储到数据库;查询数据库数据输出到excel

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#作者:cacho_37967865
#博客:https://blog.youkuaiyun.com/sinat_37967865
#文件:pymysqlModel.py
#日期:2018-10-22
#备注:pip install pymysql  pymysql是Python中操作MySQL的模块  
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

import pymysql
import time
import xlrd
from xlutils.copy import copy
import os

start_time = time.time()  #计算程序运行时间

db = pymysql.connect(
    host="localhost",
    user="root",
    password="123456",
    port=3306,
    use_unicode=True,
    charset="utf8",
    database="sunshine")

cursor = db.cursor()

def createTable():
    sql1 = 'drop table if exists save_amount;'
    sql2 = 'create table save_amount(No INT(11) NOT NULL AUTO_INCREMENT,billNo VARCHAR(50),amount FLOAT DEFAULT 0.0,PRIMARY KEY (No));'
    cursor.execute(sql1)
    cursor.execute(sql2)
    db.commit()


def get_excel_data(xlsFile):
    data = xlrd.open_workbook(xlsFile)
    table = data.sheets()[0]
    nrows = table.nrows
    sqlData = []
    # 获取指定(第二B)列数据
    for i in range(1, nrows):
        billNo = table.cell_value(i, 1)
        try:
            billNo = int(billNo)
            billNo = str(billNo)

        except Exception as f:
            print(str(f))

        row = []
        if billNo != '' and (billNo[0:3] == '718' or billNo[0:3] == '444' or billNo[0:3] == '639'):
            row.append(billNo)
            row.append(0.0)
        else:
            continue              # 不符合要求就跳过
        sqlData.append(row)
    return sqlData


def data_to_mysql(billNo,amount):
    sql = "insert into save_amount(billNo,amount) values('%s','%f')" % (billNo,amount)
    try:
        # 使用 cursor() 方法创建一个游标对象 cursor
        cursor.execute(sql)
    except Exception as e:
        # 发生错误时回滚
        db.rollback()
        print(str(e))
    else:
        db.commit()  # 事务提交
        print('事务处理成功')


# 将根据对账单Excel中数据库查找的信息copy到一个新的excel中(不能循环)
def mysql_to_excel(xlsFile,newFile):
    a = 1
    data = xlrd.open_workbook(xlsFile, formatting_info=True)
    table = data.sheets()[0]
    nrows = table.nrows
    new_excel = copy(data)
    ws = new_excel.get_sheet(0)

    for i in range(1, nrows):
        billNo = table.cell_value(i, 1)
        cursor.execute('select billNo,amount from save_amount where billNo=%s', (billNo))
        results = cursor.fetchall()  # 获取多条数据

        # row_1 = cursor.fetchone()   # 获取一条数据
        for i in range(len(results)):
            amount = results[i][1]
            print(a+1,billNo,amount)
            ws.write(a, 11, billNo)    # 12列L
            ws.write(a, 12, amount)    # 13列M
            a = a + 1
    new_excel.save(newFile)

''''''''
def main():
    createTable()      # 创建一个空白数据库表
    sqlData = get_excel_data('F:\PythonProject\PythonLession\RecordModule\oct.xls')  # 获取对账单里面不需要的运单
    for i in range(len(sqlData)):
        billNo = sqlData[i][0]
        amount = sqlData[i][1]
        data_to_mysql(billNo, amount)

    mysql_to_excel('F:\PythonProject\PythonLession\RecordModule\oct.xls', 'F:\PythonProject\PythonLession\RecordModule\oct1.xls')

    db.close()
''''''''''''''
if __name__ == '__main__':
    main()
    endtime = time.time() - start_time
    print('程序运行了%.2f秒' % endtime)

1.当我们需要传参进入到sql语句时,使用方法如下:
sql = "insert into save_amount(billNo,amount) values('%s','%f')" % (billNo,amount)
%s表示字段为str类型,%f表示字段为float类型,传参表达式:% (billNo,amount)
2.有时我们希望对原有的excel进行处理,可以复制一份excel在进行处理
from xlutils.copy import copy
data = xlrd.open_workbook(xlsFile, formatting_info=True)  # 打开需要修改的excel
new_excel = copy(data)                                    # 复制信息到新excel
ws = new_excel.get_sheet(0)                           # 获取第一个sheet,到时候对这个sheet处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值