【Python】 pymysql模組處理Mysql資料庫
阿新 • • 發佈:2018-12-26
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 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處理