python利用pymysql和openpyxl實現(xiàn)操作MySQL數(shù)據(jù)庫并插入數(shù)據(jù)
1. 需求分析
本文將介紹如何使用Python連接MySQL數(shù)據(jù)庫,并從Excel文件中讀取數(shù)據(jù),將其插入到MySQL數(shù)據(jù)庫中。
2. 環(huán)境準備
在開始本文之前,請確保您已經(jīng)安裝好了以下環(huán)境:
- Python 3.x
- PyMySQL庫
- openpyxl庫
- MySQL數(shù)據(jù)庫
3. 連接MySQL數(shù)據(jù)庫
我們可以使用pymysql
庫來連接MySQL數(shù)據(jù)庫。請先創(chuàng)建一個名為test
的MySQL數(shù)據(jù)庫,并在其中創(chuàng)建一個名為yonghu
的表。
import pymysql # 連接到MySQL數(shù)據(jù)庫 mydb = pymysql.connect( host="localhost", user="root", passwd="123456", db="test" )
在上述代碼中,我們調(diào)用了pymysql
庫中的connect()
函數(shù)來連接MySQL數(shù)據(jù)庫。其中,host
參數(shù)是MySQL服務器的主機名或IP地址,user
參數(shù)是登錄MySQL服務器的用戶名,passwd
參數(shù)是登錄MySQL服務器的密碼,db
參數(shù)是要連接的數(shù)據(jù)庫名。
4. 打開Excel文件
在Python中,可以使用openpyxl
庫來讀寫Excel文件。請先安裝好openpyxl
庫。
from openpyxl import load_workbook # 打開Excel文件 wb = load_workbook(filename=r'E:\重新開始\Python操作MySQL數(shù)據(jù)庫\sheet1.xlsx') sheet = wb.active
在上述代碼中,我們使用load_workbook()
函數(shù)加載Excel文件,并使用active
屬性獲取活動工作表。
5. 獲取表頭
在插入數(shù)據(jù)之前,我們需要先獲取Excel表格的表頭信息。
# 獲取表頭 header = [cell.value for cell in sheet[1]]
在上述代碼中,我們遍歷第一行的單元格,獲取每個單元格的值,作為表頭。
6. 遍歷Excel數(shù)據(jù)并插入數(shù)據(jù)庫
接下來,我們遍歷Excel文件中的每一行數(shù)據(jù),并將其插入到MySQL數(shù)據(jù)庫中。
# 遍歷每一行數(shù)據(jù),并將其插入到數(shù)據(jù)庫中 cursor = mydb.cursor() count = 0 for row in sheet.iter_rows(min_row=2, values_only=True): sql = f"INSERT INTO yonghu ({', '.join(header)}) VALUES ({', '.join(['%s'] * len(header))})" cursor.execute(sql, row) count += 1 print(f"正在插入{count}條數(shù)據(jù)") # 提交更改并關(guān)閉數(shù)據(jù)庫連接 mydb.commit() cursor.close() mydb.close()
在上述代碼中,我們使用iter_rows()
函數(shù)從第二行開始遍歷每一行數(shù)據(jù)。在遍歷過程中,我們構(gòu)建了一個插入數(shù)據(jù)的SQL語句,使用占位符%s
,然后使用游標對象執(zhí)行SQL語句,將行數(shù)據(jù)插入到MySQL數(shù)據(jù)庫中。
最后,我們提交了對數(shù)據(jù)庫的更改,并關(guān)閉了游標對象和與MySQL數(shù)據(jù)庫的連接。
7. 完整代碼
最終的Python代碼如下:
from openpyxl import load_workbook # 導入load_workbook函數(shù),用于加載Excel文件 import pymysql # 導入pymysql庫,用于連接和操作MySQL數(shù)據(jù)庫 # 連接到MySQL數(shù)據(jù)庫 mydb = pymysql.connect( host="localhost", user="root", passwd="123456", db="test" ) # 打開Excel文件 wb = load_workbook(filename=r'E:\重新開始\Python操作MySQL數(shù)據(jù)庫\sheet1.xlsx') # 加載Excel文件 sheet = wb.active # 獲取活動工作表 # 獲取表頭 header = [cell.value for cell in sheet[1]] # 獲取第一行的單元格值,作為表頭 # 遍歷每一行數(shù)據(jù),并將其插入到數(shù)據(jù)庫中 cursor = mydb.cursor() # 創(chuàng)建游標對象,用于執(zhí)行SQL語句 count = 0 # 計數(shù)器,用于記錄插入的數(shù)據(jù)條數(shù) for row in sheet.iter_rows(min_row=2, values_only=True): # 從第二行開始遍歷每一行數(shù)據(jù) sql = f"INSERT INTO yonghu ({', '.join(header)}) VALUES ({', '.join(['%s'] * len(header))})" # 構(gòu)建插入數(shù)據(jù)的SQL語句,使用占位符%s cursor.execute(sql, row) # 執(zhí)行SQL語句,將行數(shù)據(jù)插入到數(shù)據(jù)庫中 count += 1 # 每插入一條數(shù)據(jù),計數(shù)器加1 print(f"正在插入{count}條數(shù)據(jù)") # 輸出插入的數(shù)據(jù)條數(shù) # 提交更改并關(guān)閉數(shù)據(jù)庫連接 mydb.commit() # 提交對數(shù)據(jù)庫的更改 cursor.close() # 關(guān)閉游標對象 mydb.close() # 關(guān)閉與數(shù)據(jù)庫的連接
到此這篇關(guān)于python利用pymysql和openpyxl實現(xiàn)操作MySQL數(shù)據(jù)庫并插入數(shù)據(jù)的文章就介紹到這了,更多相關(guān)python操作MySQL數(shù)據(jù)庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python趣味挑戰(zhàn)之pygame實現(xiàn)無敵好看的百葉窗動態(tài)效果
最近寫了很多期關(guān)于pygame的案例和知識點,自己也收獲了很多知識,也在這個過程中成長了不少, 這次還是圍繞surface對象進行詳細介紹,并形成完整的案例過程,文中有非常詳細實現(xiàn)百葉窗動態(tài)效果的代碼示例,需要的朋友可以參考下2021-05-05在Python IDLE 下調(diào)用anaconda中的庫教程
這篇文章主要介紹了在Python IDLE 下調(diào)用anaconda中的庫教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03Python腳本實現(xiàn)網(wǎng)卡流量監(jiān)控
這篇文章主要介紹了Python腳本實現(xiàn)網(wǎng)卡流量監(jiān)控,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下2015-02-02