本文共 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处理