Python-openpyxl讀取Excel中數據寫入MySQL的表中
實現功能:通過openpyxl讀取Excel,并將數據寫入MySQL表中。
說明: Excel中首行必須為表中的字段名稱。因為向MySQL插入數據使用的是Insert 語句,插入的字段就是讀取第一行的數據。
Python代碼:
import pymysql from openpyxl import load_workbook def insert_excel_data_to_mysql(in_filename, in_host, in_user, in_password, in_database, in_table): # 連接數據庫 mydb = pymysql.connect( host=in_host, # 數據庫主機地址 user=in_user, # 數據庫用戶名 password=in_password, # 數據庫密碼 database=in_database # 數據庫名稱 ) # 創建游標對象 cursor = mydb.cursor() # 打開一個 Excel 文件 workbook = load_workbook(in_filename) # 選擇第一個工作表 sheet = workbook.worksheets[0] # # 或者獲取活動工作表 # sheet = workbook.active # 讀取整行或整列數據 row_values = [cell.value for cell in sheet[1]] # 第一行數據 # column_values = [sheet[f'A{i}'].value for i in range(1, sheet.max_row + 1)] # A列數據 # 獲取insert語句中Values(%s,%s)中%s占位符的個數 row_param = ['%s' for cell in sheet[1]] # 拼接插入數據的SQL語句 sql = "INSERT INTO {0} {1} VALUES {2};" # SQL插入語句 # 將語句進行格式化,并將字段名稱和占位符的單引號替換成空 sql_format = sql.format(in_table, tuple(row_values), tuple(row_param)).replace("'", "") # 開始導入 # 輸出導入文件 print("Import start from " + in_filename) # 輸出導入表 print("Import table " + in_table) # 輸出SQL語句模板 print("SQL:" + sql_format) # 輸出導入字段 print("導入字段:" + str(row_values)) # 導入行數 add_row_count = 0 # 遍歷Excel表格中的每一行,并將每一行插入到數據庫中(從第2行開始) for row in sheet.iter_rows(values_only=True, min_row=2): add_row_count += 1 cursor.execute(sql_format, row) # 執行SQL插入語句 # 提交更改并關閉數據庫連接 mydb.commit() # 提交更改 cursor.close() # 關閉游標對象 mydb.close() # 關閉數據庫連接 # 打印結果提示 print("\033[92m" + "Added rows:" + str(add_row_count) + "\033[0m") print("\033[92m"+"Import successfully! " + "\033[0m") if __name__ == '__main__': # 需要輸入的參數 filename = r'C:\\Users\\65742\\Desktop\\20240829\\斷路器.xlsx' # Excel文件路徑 host = "localhost" # 數據庫主機地址 user = "root" # 數據庫用戶名 password = "Root@1234" # 數據庫密碼 database = "test" # 數據庫名稱 table = "test_excel_to_mysql" # 數據庫表名 # 調用函數,將Excel數據插入到MySQL數據庫中(Excel中第一行是表中的字段名稱,第二行開始為數據) insert_excel_data_to_mysql(filename, host, user, password, database, table)
輸出結果:

本文來自博客園,作者:業余磚家,轉載請注明原文鏈接:http://www.rzrgm.cn/yeyuzhuanjia/p/18394045

浙公網安備 33010602011771號