基于Python的mysql與excel互相轉換

1.mysql轉為excel

getConn函數(shù)獲取mysql連接,第1個參數(shù)database為要連接的數(shù)據(jù)庫。
mysql2excel函數(shù)完成主要轉換功能,第1個參數(shù)database為要連接的數(shù)據(jù)庫,第2個參數(shù)為要轉換的數(shù)據(jù)表,第3個參數(shù)為要保存的excel文件名。
在執(zhí)行cursor.execute后,利用data_list = cursor.fetchall()獲取數(shù)據(jù)庫中所有數(shù)據(jù),利用cursor.description獲取函數(shù)中字段的相關信息,
字段的相關信息的數(shù)據(jù)類型為元組,其中第1個為字段名。
利用xlwt.Workbook()方法實例化對象賦值給excel變量,利用excel.add_sheet()方法獲取新的表格,利用sheet.write()往excel文件中寫入數(shù)據(jù)。

import pymysql
import xlwt

def getConn(database='pydb'):
    args = dict(
        host='localhost',
        user='root',
        passwd='...your passwd',
        db=database,
        charset='utf8'
    )
    conn = pymysql.connect(**args)
    return conn

def mysql2excel(database='pydb',table='test',excelResult = ''):
    conn = getConn(database)
    cursor = conn.cursor()
    cursor.execute("select * from {}".format(table))
    data_list = cursor.fetchall()
    excel = xlwt.Workbook()
    sheet = excel.add_sheet("sheet1")
    row_number = len(data_list)
    column_number = len(cursor.description)
    for i in range(column_number):
        sheet.write(0,i,cursor.description[i][0])
    for i in range(row_number):
        for j in range(column_number):
            sheet.write(i+1,j,data_list[i][j])
    excelName = "mysql_{}_{}.xls".format(database,table)
    if excelResult != '':
        excelName = excelResult
    excel.save(excelName)

if __name__ == "__main__":
    mysql2excel("customdb","deposit")

2.excel轉為mysql

getConn函數(shù)獲取mysql連接,第1個參數(shù)database為要連接的數(shù)據(jù)庫。
excel2mysql函數(shù)完成主要轉換功能,第1個參數(shù)為讀取的excel文件名,第2個參數(shù)為存放數(shù)據(jù)的數(shù)據(jù)庫,第3個參數(shù)為保存的表名。
利用xlrd.open_workbook()方法實例化對象賦值給excel,利用excel.sheet_by_index(0)獲取第1張數(shù)據(jù)薄賦值給sheet,
利用sheet.nrows獲取行數(shù)賦值給row_number,利用sheet.ncols獲取列數(shù)賦值給column_number
利用sheet.row_values獲取第一行的內(nèi)容即字段賦值給field_list,利用循環(huán)+sheet.row_values()方法獲取數(shù)據(jù)內(nèi)容賦值給data_list
數(shù)據(jù)庫操作分為:連接——>刪除原有同名數(shù)據(jù)庫——>創(chuàng)建數(shù)據(jù)庫——>插入數(shù)據(jù)——>提交并關閉連接
drop_sql變量為刪除原有同名數(shù)據(jù)庫的sql語句,create_sql變量為創(chuàng)建數(shù)據(jù)庫的sql語句,insert_sql變量為往數(shù)據(jù)表中插入數(shù)據(jù)的sql語句。
最后conn.commit()conn.close()

import xlrd
import pymysql

def getConn(database='pydb'):
    args = dict(
        host='localhost',
        user='root',
        passwd='...your passwd',
        db=database,
        charset='utf8'
    )
    conn = pymysql.connect(**args)
    return conn

def excel2mysql(excelName,database='pydb',table='test'):
    #下面代碼作用:獲取到excel中的字段和數(shù)據(jù)
    excel = xlrd.open_workbook(excelName)
    sheet = excel.sheet_by_index(0)
    row_number = sheet.nrows
    column_number = sheet.ncols
    field_list = sheet.row_values(0)
    data_list = []
    for i in range(1,row_number):
        data_list.append(sheet.row_values(i))
    #下面代碼作用:根據(jù)字段創(chuàng)建表,根據(jù)數(shù)據(jù)執(zhí)行插入語句
    conn = getConn(database)
    cursor = conn.cursor()
    drop_sql = "drop table if exists {}".format(table)
    cursor.execute(drop_sql)
    create_sql = "create table {}(".format(table)
    for field in field_list[:-1]:
        create_sql += "{} varchar(50),".format(field)
    create_sql += "{} varchar(50))".format(field_list[-1])
    cursor.execute(create_sql)
    for data in data_list:
        new_data = ["'{}'".format(i) for i in data]
        insert_sql = "insert into {} values({})".format(\
            table,','.join(new_data))
        cursor.execute(insert_sql)
    conn.commit()
    conn.close()

if __name__ == '__main__':
    excel2mysql("mysql_myschool_student.xls")
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容