使用python将excel数据导入数据库
使用python将excel数据导入数据库
- 因为需要对数据处理,将excel数据导入到数据库,记录一下过程。
- 使用到的库:xlrd 和 pymysql (如果需要写到excel可以使用xlwt)
- 直接丢代码,使用python3,注释比较清楚。
- 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
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贴上来。
- 优化了一下这个程序
- 123456789101112131415161718192021222324252627282930313233343536373839404142
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()
- 再改一下,每一万条数据写入到数据库一次
- 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
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'
)
- 思考,如果数据插入有错误,怎么解决,
- 其实有很多数据库工具可以直接来解决这个问题,注意字符转换的格式就好。
- 批量插入数据请看: https://www.cnblogs.com/longbigbeard/p/9317141.html
使用python将excel数据导入数据库的更多相关文章
- [Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!
引言 项目中常用到将数据导入Excel,将Excel中的数据导入数据库的功能,曾经也查找过相关的内容,将曾经用过的方案总结一下. 方案一 NPOI NPOI 是 POI 项目的 .NET 版本.POI ...
- 如何把excel数据导入数据库
这里介绍2种把excel数据导入oracle数据库的方法. 1. 在excel中生成sql语句. 1)在数据列的右侧,第一行的任何位置输入="insert into table(xx,yyy ...
- C#将Excel数据导入数据库(MySQL或Sql Server)
最近一直很忙,很久没写博客了.今天给大家讲解一下如何用C#将Excel数据导入Excel,同时在文章最后附上如何用sqlserver和mysql工具导入数据. 导入过程大致分为两步: 1.将excel ...
- Excel数据导入数据库
maven依赖 <!--excel相关依赖--> <dependency> <groupId>org.apache.poi</groupId> < ...
- 转:[Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!
引言 项目中常用到将数据导入Excel,将Excel中的数据导入数据库的功能,曾经也查找过相关的内容,将曾经用过的方案总结一下. 方案一 NPOI NPOI 是 POI 项目的 .NET 版本.POI ...
- PHPExcel将Excel数据导入数据库
<?php //PHPExcel读取导入Excel数据到数据库(2003,2007通用)使用方法: //先用excel2array()方法将excel表中的数据存储到数组,在从遍历二维数组将数据 ...
- 利用python将excel数据导入mySQL
主要用到的库有xlrd和pymysql, 注意pymysql不支持python3 篇幅有限,只针对主要操作进行说明 连接数据库 首先pymysql需要连接数据库,我这里连接的是本地数据库(数据库叫ld ...
- 将Excel数据导入数据库
Excel如下,这页工作表名叫“线路” 数据库表如下 using System; using System.Collections.Generic; using System.Linq; using ...
- ASP.NET Excel数据导入数据库
<identity impersonate="true"/> 是指模拟IIS身份验证 導入錯誤時可刪除 protected void btnImport_Click(o ...
随机推荐
- BZOJ 4591 【SHOI2015】 超能粒子炮·改
题目链接:超能粒子炮·改 这道题的大体思路就是用\(lucas\)定理,然后合并同类项,就可以得到一个可以递归算的式子了. 我们用\(S(n,k)\)表示答案,\(p\)表示模数(\(2333\)是一 ...
- myeclipse2014配置多个同版本的Tomcat
引言: 网上有很多myeclipse配置多个Tomcat的教程都可以参考,如[配置多个Tomcat1],[配置多个Tomcat2], 可以直接参考以上两个教程,我这里只对网上的教程中存在的一个点做说明 ...
- Oracle其他简单查询
范例:查询公司中所有雇员的职位信息 SELECT job FROM emp; 实际在公司里面,一个职位会有多个人员.如果查询全部职位,肯定会存在重复.要消除掉重复,利用DISTINCT完成.(dist ...
- SpringBoot整合+logback日志配置
本次演示的代码结构如下,基于maven,整合SpringBoot.Spring.Mybaits的SSM框架.同时测试logback日志框架的使用及配置. 1.创建maven工程,修改pom.xml文件 ...
- webpack优化记录
什么是Webpack . ( 模块打包机,分析项目结构,找到js不能识别的代码语言,转换和打包后,供browser使用 ) WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到 ...
- 学习笔记47—PhotoShop技巧
1.photoshop里怎么给画布画对角线? photoshop里给画布画对角线有二种方法: 1) 选直线工具 从一角拉向另一对角 就OK了 非常简单: 2) 选钢笔工具 鼠标先点击某一角 然后再点击 ...
- 微信小程序动态更改样式
获取列表长度(动态渲染),当长度>x时添加内联样式并绑定数据{{}},通过js动态更改{{}}
- 注册表的作用、bat文件中REG ADD命令添加注册表项以及bat
注册表的用途与设置 注册表是windows的核心,里面储存着大量的系统信息,说白了就是一个庞大的数据库.如果你不懂什么是数据库,那没关系,不影响你了解注册表,不过最好对数据库有所了解.注册表里面所有的 ...
- (转)C#中base关键字的几种用法
base其实最大的使用地方在面相对性开发的多态性上,base可以完成创建派生类实例时调用其基类构造函数或者调用基类上已被其他方法重写的方法.例如: 2.1关于base调用基类构造函数 public c ...
- Java Config for WebProject
1.Java EE vs Java SE They are just official SDK,when using IDE,it's ok to just install jdk/jre. &quo ...