使用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 ...
随机推荐
- docker 日志分析
日志分两类,一类是 Docker 引擎日志:另一类是 容器日志. Docker 引擎日志 Docker 引擎日志 一般是交给了 Upstart(Ubuntu 14.04) 或者 systemd (Ce ...
- cp命令覆盖文件时不用按Y来确认的方法
我们在Linux下使用cp命令复制文件时候,有时候会需要覆盖一些同名文件,覆盖文件的时候都会有提示:需要不停的按Y来确定执行覆盖.文件数量不多还好,但是要是几百个估计按Y都要吐血了,于是折腾来半天总结 ...
- Microsoft Active Directory(LDAP)连接常见错误代码
接下来显示的认证错误类似于这样: "The exception is [ LDAP: error code 49 - 80090308: LdapErr: DSID-0Cxxxxxx, co ...
- Ajax_请求get,post案例
1. 最原始的ajax请求方式 (1). get请求 <%@ Page Language="C#" AutoEventWireup="true" Code ...
- VC.时间(网页内容收集)
1.VC++获得当前系统时间的几种方案_记忆53秒_新浪博客.html(http://blog.sina.com.cn/s/blog_676271a60101i0hb.html) 1.1.内容保存: ...
- [osg][原]osg的坐标系:使用右手法则Y轴向前、X向、右Z向上。camare的默认姿态:向下看(Z轴负向),头向前(Y轴正向)
参考:http://blog.csdn.net/tmljs1988/article/details/7561887 图中上半边为opengl坐标系,下半边的osg坐标系: osg::Camare的默认 ...
- 【简单易懂】JPA概念解析:CascadeType(各种级联操作)详解
https://www.jianshu.com/p/e8caafce5445 [在一切开始之前,我要先告诉大家:慎用级联关系,不要随便给all权限操作.应该根据业务需求选择所需的级联关系.否则可能酿成 ...
- 雷林鹏分享:jQuery EasyUI 表单 - 创建异步提交表单
jQuery EasyUI 表单 - 创建异步提交表单 本教程向您展示如何通过 easyui 提交一个表单(Form).我们创建一个带有 name.email 和 phone 字段的表单.通过使用 e ...
- 20180429 xlVBA套打单据批量复制
Sub testCopyModelRange() Set ModelSheet = ThisWorkbook.Worksheets("单据模板") Set PrintSheet = ...
- Spring Batch JSON 支持
Spring Batch 4.1 开始能够支持 JSON 格式了.这个发布介绍了一个新的数据读(item reader)能够读取一个 JSON 资源,这个资源按照下面的格式: [ { &q ...