博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Python】pymysql模块处理Mysql数据库
阅读量:4101 次
发布时间:2019-05-25

本文共 3715 字,大约阅读时间需要 12 分钟。

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.csdn.net/sinat_37967865#文件:pymysqlModel.py#日期:2018-10-22#备注:pip install pymysql  pymysql是Python中操作MySQL的模块  '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''import pymysqlimport timeimport xlrdfrom xlutils.copy import copyimport osstart_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 sqlDatadef 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处理

你可能感兴趣的文章
一个很棒的Flutter学习资源列表
查看>>
为什么你应该放弃React老的Context API用新的Context API
查看>>
Koa2初体验
查看>>
Koa 2 初体验(二)
查看>>
Koa2框架原理解析和实现
查看>>
C++模板
查看>>
【C#】如何实现一个迭代器
查看>>
【C#】利用Conditional属性完成编译忽略
查看>>
【Unity】微信登录后将头像存为bytes,将bytes读取成sprite图片
查看>>
【Unity】使用GPS定位经纬度
查看>>
最小费用流 Bellman-Ford与Dijkstra 模板
查看>>
mapReduce(3)---入门示例WordCount
查看>>
hbase(3)---shell操作
查看>>
hbase(1)---概述
查看>>
hbase(5)---API示例
查看>>
SSM-CRUD(1)---环境搭建
查看>>
Nginx(2)---安装与启动
查看>>
springBoot(5)---整合servlet、Filter、Listener
查看>>
C++ 模板类型参数
查看>>
C++ 非类型模版参数
查看>>