python把excel表格中的内容写入数据库中案例

python是一种灵活快捷的语言,java实现的一个小功能需要几层目录的,python,一页代码就可以做到。

本人以前主要是搞java的,现在也在开始研究python。关于把excel写入数据库中,本人认为这是一个最基础也是比较重要的功能,初学的途中,记录一下同时也是本人csdn上第一帖

不规范的地方还请大家多多指教。

首先是创建数据库表,表结构,和主键设置好。

create table class(
id int auto_increment PRIMARY KEY,
username varchar(20), 
gender varchar(20),
age int(20),
score int(20)
);

python把excel表格中的内容写入数据库中案例_第1张图片

import xlrd
import pymysql

 Python 导入两个库,pymysql 和 xlrd

def get_connect():
    conn_1 = None
    try:
        conn_1 = pymysql.connect(host='localhost', user="root", password='root', database='demo', charset='utf8')
        return conn_1
    except:
        pass
    return conn_1

定义连接的方法,返回值

def close(conn_1, cursor_1):
    if conn_1:
        try:
            conn_1.close()
        except:
            pass
    if cursor_1:
        try:
            cursor_1.close()
        except:
            pass

定义关闭连接的方法,返回值

xls_path = r"C:\Users\TIANYUAN HU\Desktop\excel-demo.xls"

    conn = None
    cursor = None
    str_sql = "insert into class (id,username,gender,age,score) values (%s,%s,%s,%s,%s)"
    first_row_number = 1

 设置好路径,conn cursor默认初始值为none 

定义sql 插入语句

定义初始行为1,后面for循环会用到。

file = xlrd.open_workbook(xls_path)
        sheet_1 = file.sheet_by_index(0)  # 根据sheet页的排序选取sheet
        row_content = sheet_1.row_values(0)  # 获取指定行的数据,返回列表,排序自0开始
        print(row_content)
        row_number = sheet_1.nrows  # 获取有数据的最大行数

        conn = get_connect()
        cursor = conn.cursor()

        conn.autocommit(False)

 打开文件,选取sheet, 最大行数,设置不自动提交

   for i in range(first_row_number, row_number):
            cid = sheet_1.cell(i, 0).value
            name = sheet_1.cell(i, 1).value
            gender = sheet_1.cell(i, 2).value
            age = sheet_1.cell(i, 3).value
            score = sheet_1.cell(i, 4).value
            values = ( cid, name, gender, age, score)

  print(values)
            cursor.execute(str_sql, values)  # 如果大数据量的情况,需要分步提交
        conn.commit()

for 循环遍历 values 

  conn.commit()
   
   
  close(conn, cursor)

最后提交 关闭不要忘记

import xlrd
import pymysql


def get_connect():
    conn_1 = None
    try:
        conn_1 = pymysql.connect(host='localhost', user="root", password='root', database='demo', charset='utf8')
        return conn_1
    except:
        pass
    return conn_1


def close(conn_1, cursor_1):
    if conn_1:
        try:
            conn_1.close()
        except:
            pass
    if cursor_1:
        try:
            cursor_1.close()
        except:
            pass


if __name__ == '__main__':
    xls_path = r"C:\Users\TIANYUAN HU\Desktop\excel-demo.xls"

    conn = None
    cursor = None
    str_sql = "insert into class (id,username,gender,age,score) values (%s,%s,%s,%s,%s)"
    first_row_number = 1

    try:
        file = xlrd.open_workbook(xls_path)
        sheet_1 = file.sheet_by_index(0)  # 根据sheet页的排序选取sheet
        row_content = sheet_1.row_values(0)  # 获取指定行的数据,返回列表,排序自0开始
        print(row_content)
        row_number = sheet_1.nrows  # 获取有数据的最大行数

        conn = get_connect()
        cursor = conn.cursor()

        conn.autocommit(False)
        # 1、2、3、4
        for i in range(first_row_number, row_number):
            cid = sheet_1.cell(i, 0).value
            name = sheet_1.cell(i, 1).value
            gender = sheet_1.cell(i, 2).value
            age = sheet_1.cell(i, 3).value
            score = sheet_1.cell(i, 4).value
            values = ( cid, name, gender, age, score)


       print(str_sql)
            print(values)
            cursor.execute(str_sql, values)  # 如果大数据量的情况,需要分步提交
        conn.commit()
    except:
        if conn:
            conn.rollback()
    finally:
        close(conn, cursor)

完整代码,带上try except  finally 设置回滚代码优化达到最佳

你可能感兴趣的:(python,python)