Python批量匯入Excel資料到MySQL

何以為術發表於2020-11-20
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2020/11/20 14:30
# @Author  : lumia98@vip.qq.com
# @File    : Excel
# @Software: PyCharm
import xlrd
import pymysql

class Add_Excel_Data_To_MySQL(object):
    """
    Excel表格資料批量匯入到MySQL庫
    """

    # pymysql連線
    def conn_pymysql(self, host, dbuser, dbpass, dbname):
        # 連線MySQL
        self.conn = pymysql.connect(host=host, user=dbuser, passwd=dbpass, db=dbname)
        # 獲得遊標物件, 用於逐行遍歷資料庫資料
        self.cursor = self.conn.cursor()

    def excel_path(self, file_path, excle_table_name):
        self.excel = xlrd.open_workbook(file_path)
        self.sheet_name = self.excel.sheet_by_name(excle_table_name)

    # 迴圈Excel表格資料,並且寫入到MySQL
    def for_excel_insert_mysql(self, db01, db02, db03, db04, db05, db06, db07):
        """
        如果有其他欄位請新增
        :param db01:  MySQL表裡的第一個需要手動新增資料的欄位
        :param db02:  MySQL表裡的第二個需要手動新增資料的欄位
        :param db03:  MySQL表裡的第三個需要手動新增資料的欄位
        :param db04:  MySQL表裡的第四個需要手動新增資料的欄位
        :param db05:  MySQL表裡的第五個需要手動新增資料的欄位
        :param db06:  MySQL表裡的第六個需要手動新增資料的欄位
        :param db07:  MySQL表裡的第七個需要手動新增資料的欄位
        :return:
        """
        # 插入到MySQL
        self.query = "INSERT INTO machine ({}, {}, {}, {}, {}, {}, {}) VALUES (%s, %s, %s, %s, %s, %s, %s)".format(db01,db02,db03,db04,db05,db06,db07)

        # 建立一個for迴圈迭代讀取xls檔案每行資料的;
        # 從第二行開始匯入;
        # 如果沒有標題,則1改成0
        for r in range(1, self.sheet_name.nrows):
            # 匯入7列Excel資料(從第一列開始匯入);
            # 如果匯入的列增加或者減少,請根據實情;
            excel_01 = self.sheet_name.cell(r, 0).value,
            excel_02 = self.sheet_name.cell(r, 1).value,
            excel_03 = self.sheet_name.cell(r, 2).value,
            excel_04 = self.sheet_name.cell(r, 3).value,
            excel_05 = self.sheet_name.cell(r, 4).value,
            excel_06 = self.sheet_name.cell(r, 5).value,
            excel_07 = self.sheet_name.cell(r, 6).value

            self.values = (excel_01, excel_02, excel_03, excel_04, excel_05, excel_06, excel_07)

            # 執行sql語句
            self.cursor.execute(self.query, self.values)

        # 提交
        self.conn.commit()
        # 關閉遊標
        self.cursor.close()
        # 關閉資料庫連線
        self.conn.close()

        self.columns = str(self.sheet_name.ncols)
        self.rows = str(self.sheet_name.nrows)

        print("一共匯入了{}列, {}行資料!".format(self.columns, self.rows))


if __name__ == '__main__':
    a = Add_Excel_Data_To_MySQL()

    # 連線MySQL
    a.conn_pymysql(host="172.211.13.11",dbuser="root",dbpass="123456",dbname="manage")

    # Excel檔案路徑
    a.excel_path(r"C:\Users\Super\Desktop\machine.xls", "table")

    # Excel資料插入MySQL
    a.for_excel_insert_mysql(
        db01="cname_id",
        db02="machine_name",
        db03="machine_sn",
        db04="monitor_name",
        db05="monitor_sn",
        db06="to_username",
        db07="depart_id"
    )

相關文章