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)
);
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 设置回滚代码优化达到最佳