使用python将excel数据导入数据库
https://www.cnblogs.com/longbigbeard/p/9309180.html
- 因为需要对数据处理,将excel数据导入到数据库,记录一下过程。
- 使用到的库:xlrd 和 pymysql (如果需要写到excel可以使用xlwt)
- 直接丢代码,使用python3,注释比较清楚。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import
xlrd
import
pymysql
# import importlib
# importlib.reload(sys) #出现呢reload错误使用
def
open_excel():
try
:
book
=
xlrd.open_workbook(
"XX.xlsx"
)
#文件名,把文件与py文件放在同一目录下
except
:
print
(
"open excel file failed!"
)
try
:
sheet
=
book.sheet_by_name(
"sheet名称"
)
#execl里面的worksheet1
return
sheet
except
:
print
(
"locate worksheet in excel failed!"
)
#连接数据库
try
:
db
=
pymysql.connect(host
=
"127.0.0.1"
,user
=
"root"
,
passwd
=
"XXX"
,
db
=
"XXX"
,
charset
=
'utf8'
)
except
:
print
(
"could not connect to mysql server"
)
def
search_count():
cursor
=
db.cursor()
select
=
"select count(id) from XXXX"
#获取表中xxxxx记录数
cursor.execute(select)
#执行sql语句
line_count
=
cursor.fetchone()
print
(line_count[
0
])
def
insert_deta():
sheet
=
open_excel()
cursor
=
db.cursor()
for
i
in
range
(
1
, sheet.nrows):
#第一行是标题名,对应表中的字段名所以应该从第二行开始,计算机以0开始计数,所以值是1
name
=
sheet.cell(i,
0
).value
#取第i行第0列
data
=
sheet.cell(i,
1
).value
#取第i行第1列,下面依次类推
print
(name)
print
(data)
value
=
(name,data)
print
(value)
sql
=
"INSERT INTO XXX(name,data)VALUES(%s,%s)"
cursor.execute(sql,value)
#执行sql语句
db.commit()
cursor.close()
#关闭连接
insert_deta()
db.close()
#关闭数据
print
(
"ok "
)
XXX里自行修改自己的名称。
- 说明:对于不规则的单元格,例如合并过的单元格会取到空值。
- 有机会把数据库写到excel贴上来。
- 优化了一下这个程序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import
pymysql
import
xlrd
# 连接数据库
try
:
db
=
pymysql.connect(host
=
"127.0.0.1"
, user
=
"root"
,
passwd
=
"XXX"
,
db
=
"XXX"
,
charset
=
'utf8'
)
except
:
print
(
"could not connect to mysql server"
)
def
open_excel():
try
:
book
=
xlrd.open_workbook(
"XXX.xlsx"
)
#文件名,把文件与py文件放在同一目录下
except
:
print
(
"open excel file failed!"
)
try
:
sheet
=
book.sheet_by_name(
"XXX"
)
#execl里面的worksheet1
return
sheet
except
:
print
(
"locate worksheet in excel failed!"
)
def
insert_deta():
sheet
=
open_excel()
cursor
=
db.cursor()
row_num
=
sheet.nrows
for
i
in
range
(
1
, row_num):
# 第一行是标题名,对应表中的字段名所以应该从第二行开始,计算机以0开始计数,所以值是1
row_data
=
sheet.row_values(i)
value
=
(row_data[
0
],row_data[
1
],row_data[
2
],row_data[
3
])
print
(i)
sql
=
"INSERT INTO demo_yangben(xxx,xxxx,xxxx,xxxx)VALUES(%s,%s,%s,%s)"
cursor.execute(sql, value)
# 执行sql语句
db.commit()
cursor.close()
# 关闭连接
open_excel()
insert_deta()
- 再改一下,每一万条数据写入到数据库一次
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import
pymysql
import
xlrd
import
sys
'''
连接数据库
args:db_name(数据库名称)
returns:db
'''
def
mysql_link(de_name):
try
:
db
=
pymysql.connect(host
=
"127.0.0.1"
, user
=
"xxx"
,
passwd
=
"xxx"
,
db
=
xxx,
charset
=
'utf8'
)
return
db
except
:
print
(
"could not connect to mysql server"
)
'''
读取excel函数
args:excel_file(excel文件,目录在py文件同目录)
returns:book
'''
def
open_excel(excel_file):
try
:
book
=
xlrd.open_workbook(excel_file)
# 文件名,把文件与py文件放在同一目录下
print
(sys.getsizeof(book))
return
book
except
:
print
(
"open excel file failed!"
)
'''
执行插入操作
args:db_name(数据库名称)
table_name(表名称)
excel_file(excel文件名,把文件与py文件放在同一目录下)
'''
def
store_to(db_name, table_name, excel_file):
db
=
mysql_link(db_name)
# 打开数据库连接
cursor
=
db.cursor()
# 使用 cursor() 方法创建一个游标对象 cursor
book
=
open_excel(excel_file)
# 打开excel文件
sheets
=
book.sheet_names()
# 获取所有sheet表名
for
sheet
in
sheets:
sh
=
book.sheet_by_name(sheet)
# 打开每一张表
row_num
=
sh.nrows
print
(row_num)
list
=
[]
# 定义列表用来存放数据
num
=
0
# 用来控制每次插入的数量
for
i
in
range
(
1
, row_num):
# 第一行是标题名,对应表中的字段名所以应该从第二行开始,计算机以0开始计数,所以值是1
row_data
=
sh.row_values(i)
# 按行获取excel的值
value
=
(row_data[
0
], row_data[
1
], row_data[
2
], row_data[
3
], row_data[
4
], row_data[
5
], \
row_data[
6
], row_data[
7
], row_data[
8
], row_data[
9
], row_data[
10
], row_data[
11
], row_data[
12
],
row_data[
13
], row_data[
14
])
list
.append(value)
# 将数据暂存在列表
num
+
=
1
if
( num>
=
10000
):
# 每一万条数据执行一次插入
print
(sys.getsizeof(
list
))
sql
=
"INSERT INTO "
+
table_name
+
" (time, xingbie, afdd, xzb, yzb, cfbj, jjlbmc, \
bjlbmc, bjlxmc, bjlxxlmc, gxqymc,gxdwmc, afql, afxqxx, cjdwmc)\
VALUES(
%
s,
%
s,
%
s,
%
s,
%
s,
%
s,
%
s,
%
s,
%
s,
%
s,
%
s,
%
s,
%
s,
%
s,
%
s)"
cursor.executemany(sql,
list
)
# 执行sql语句
num
=
0
# 计数归零
list
.clear()
# 清空list
print
(
"worksheets: "
+
sheet
+
" has been inserted 10000 datas!"
)
print
(
"worksheets: "
+
sheet
+
" has been inserted "
+
str
(row_num)
+
" datas!"
)
db.commit()
# 提交
cursor.close()
# 关闭连接
db.close()
if
__name__
=
=
'__main__'
:
store_to(
'demo'
,
'demo_yangben'
,
'xxx.xlsx'
)
- 思考,如果数据插入有错误,怎么解决,
- 其实有很多数据库工具可以直接来解决这个问题,注意字符转换的格式就好。
- 上面这个程序在当数据不足10000的时候会出现问题,下面的一篇文章里进行了更正。
- 批量插入数据请看: https://www.cnblogs.com/longbigbeard/p/9317141.html
- 以上。
使用python将excel数据导入数据库相关推荐
- python将EXCEL数据导入数据库时日期型数据变成数字并加.0的问题一行代码解决方案方案
[问题描述]:python将EXCEL数据导入数据库时日期变成文本型数据并显示为数字格式 [解决方案] 数据源: codes: #!/usr/bin/python3 -- coding: utf-8 ...
- python接入excel_使用python将excel数据导入数据库过程详解
因为需要对数据处理,将excel数据导入到数据库,记录一下过程. 使用到的库:xlrd 和 pymysql (如果需要写到excel可以使用xlwt) 直接丢代码,使用python3,注释比较清楚. ...
- python将excel数据导入ppt_使用python将excel数据导入数据库
因为需要对数据处理,将excel数据导入到数据库,记录一下过程. 使用到的库:xlrd 和 pymysql (如果需要写到excel可以使用xlwt) 直接丢代码,使用python3,注释比较清楚. ...
- Python实现Excel数据导入MySQL
前言 近年来,数据分析正在改变我们的工作方式,数据分析的相关工作也越来越受到人们的青睐.很多编程语言都可以做数据分析,比如Python.B.Matlab等,Python凭借着自身无可比拟的优势,被广泛 ...
- 转:[Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!...
引言 项目中常用到将数据导入Excel,将Excel中的数据导入数据库的功能,曾经也查找过相关的内容,将曾经用过的方案总结一下. 方案一 NPOI NPOI 是 POI 项目的 .NET 版本.POI ...
- Excel数据导入数据库(Java)
Excel 文件数据导入数据库 首先说明下读写Excel三种常用的技术: POI : 效率高,操作相对JXL复杂,支持公式,宏,图像图表,一些企业应用上会比较实用.能够修饰单元格属性.字体 数字 日期 ...
- ssis 导入excel_使用SSIS包将MS Excel数据导入数据库
ssis 导入excel The easiest way to import the data into the SQL database is using the Import Data wizar ...
- 如何用Java将excel数据导入数据库
近写了点关于将excel导入数据库的代码,当然也可以看做是对前面所介绍的小项目进行补充所做的准备.我一般都是先完成功能,然后将其封装成块,再添加到项目中,个人癖好不值得借鉴.项目中关于解析excel数 ...
- EXCEL数据导入数据库
1.类设计,EXCEL要据配置读入DATASET using System; using System.Data; using System.Collections; using System.Dat ...
最新文章
- V3S代码整合中遇到的一个奇怪问题
- android4.0 菜单,三大主流安卓4.0界面解析 MIUI最实用
- python执行shell脚本、执行mongodb_mongodb执行js脚本(一)---shell执行
- C++-string常用函数整理(建议收藏)
- Java内存分析—栈,堆,方法区
- 两部委联合查处一批网店侵权 淘宝易趣成重灾区
- TCN-时间卷积网络
- 车路协同发展挑战与影响解析
- Http——Post上传文件并传递其他参数信息
- ROS Dst-Nat 后内网不能通过公网IP访问内网服务器解决方法
- 程序员英语学习指南(建议收藏)
- Unity之AB包的创建加载
- 基于POP3协议收取邮件
- 一份超详细的UI设计规范全攻略
- pycharm的 crtl + r 使用正则表达式进行 request-header格式更改
- GATE V9.0安装指南
- 2015年百度之星程序设计大赛 - 初赛(2)
- 20-软通动力信息技术股份有限公司-info
- Bootstrap栅格布局
- 上海交通大学考博:过来人的考博考经验【zz】
热门文章
- Python自动化运维工具fabric的安装
- iOS应用国际化教程(2014版)
- Linux从入门到精通系列之PPTP
- 2013年28周信息安全汇总(7.7 - 7.13)
- flink 检查点_Flink检查点和恢复
- 蓝牙耳机音量大解决办法_长时间使用蓝牙耳机的危害这么大?我们到底该选什么蓝牙耳机呢?...
- 平台api对数据收集的影响_收集您的数据不是那么怪异的api
- opencv:边缘检测之Laplacian算子思想及实现
- kotlin数据库_如何在Kotlin应用程序中使用Xodus数据库
- 事件捕获(capture)和冒泡事件(Bubble)