Python脚本:实现excel表格导入到数据库,支持mysql,postgresql,MongoDB
import xlrd,re
from datetime import datetime
from xlrd import xldate_as_tuple # 判断上传表格是否与模板要求一致
def checkExcel(path,field_attr):
#1.打开当前excel表格
data = xlrd.open_workbook(path)
now_table = data.sheet_by_index(0)
#当前表格的行数
rows_numn = now_table.nrows #2.1验证长度
table_index = now_table.row_values(0)
if len(field_attr) != len(table_index):
return False,'表格行数应为{0}行'.format(len(field_attr))
else:
#2.2验证内容
flag = True
msg = ''
for k in range(1, rows_numn):
# 2.2.1验证内容12,13是否马满足时间格式%y-%m-%d %H
start_time = now_table.cell(k,12)
end_time = now_table.cell(k,13)
pattern = r"(\d{4}-\d{2}-\d{1,2}\s\d{2})"
if re.match(pattern,start_time) == None:
flag = False
msg += '第{0}行第{1}列格式用为 2018-01-01 00 格式'.format(k,12+1)
if re.match(pattern,end_time) == None:
flag = False
msg += '第{0}行第{1}列格式用为 2018-01-01 00 格式'.format(k,13+1)
if len(msg) >=100:
msg += '.....'
break
return flag, msg #数据库表添加一条数据的方法
def addObj(obj):
pass#不同数据实现方法不一样 #将表格数据插入数据库 path上传表格路径 field_attr值表格行数对应字段如{0:'name',1:'age',2:'sex'}
def exportExcel(path,field_attr):
#1.检查表格
flag,msg = checkExcel(path,field_attr)
if not flag:
return msg
else:#通过验证
# 2.读取excel
data = xlrd.open_workbook(path)
now_table = data.sheet_by_index(0)
# 获得当前表格的行数
rows_numn = now_table.nrows
# 将当前的sheet插入到数据库
for k in range(1, rows_numn):
row_vlaue = now_table.row_values(k)
obj = {}
# 处理要插入的数据,把非字符串的数据转换成字符串类型,同事将字符串变成 sql语句需要的类型 for a in range(0, len(row_vlaue)):
ctype = now_table.cell(k, a).ctype
# ctype: 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
if ctype == 1:
row_vlaue[a] = row_vlaue[a].replace("'","/'")
if ctype == 2 and row_vlaue[a] % 1 == 0:
tmp = int(row_vlaue[a])
row_vlaue[a] = str(tmp)
if ctype == 3:
d = datetime(*xldate_as_tuple(row_vlaue[a], 0))
row_vlaue[a] = d.strftime('%Y-%m-%d %H')
obj[field_attr[a]] = row_vlaue[a]
#3.将该行数据插入数据库
try:
addObj(obj)
except:
return '第{0}行数据插入失败'.format(k)
return 'ok'
支持.xlsx结尾的excel文件
Python脚本:实现excel表格导入到数据库,支持mysql,postgresql,MongoDB的更多相关文章
- 在 Symfony Command中自定义脚本把Excel数据导入到数据库中
// 注:只是在此做下记录,有兴趣的可以参考,不做实际教程文档 <?php/** * Created by IntelliJ IDEA. * User: davis * Date: 2019-0 ...
- 项目总结04:SQL批量导入数据:将具有多表关联的Excel数据,通过sql语句脚本的形式,导入到数据库
将具有多表关联的Excel数据,通过sql语句脚本的形式,导入到数据库 写在前面:本文用的语言是java:数据库是MySql: 需求:在实际项目中,经常会被客户要求,做批量导入数据:一般的简单的单表数 ...
- python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图
python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图 # coding=utf-8 from openpyxl import load_workbook ...
- C#解决从含身份证号码的Excel表格导入数据库的问题
用C#做从Excel表导入SQL数据库时发现从EXCEL导入的身份证号码会变成科学表示方法. 解决这个问题是比较容易的,首先,打开电子表格,选中“身份证号码”一列,右键选择“设置单元格格式”,进入单元 ...
- Delphi中使用python脚本读取Excel数据
Delphi中使用python脚本读取Excel数据2007-10-18 17:28:22标签:Delphi Excel python原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 . ...
- 使用Excel表格导入数据到Oracle表
在工作中我们会遇到将通过数据手动录入到系统中的需求,如果数据量比较小,那么手动输入是可行的,倘若数据量很大,那么这些数据手动录入将会是一个很大的工作量,为了简化这个手动录入的操作流程,我们可以使用Ex ...
- 利用TOAD实现把EXCEL数据导入oracle数据库
利用TOAD实现把EXCEL数据导入oracle数据库 工具: Toad11.7z(百度搜索,直接下载) 1.将Excel文件中某些字段导入到Oracle数据库的对应表 连接想要导入的数据库 ,然 ...
- (转)如何将 Excel 文件导入到 Navicat for MySQL 数据库
场景:工作中需要统计一段时间的加班时长,人工统计太过麻烦,就想到使用程序实现来统计 1 如何将 Excel 文件导入到 Navicat for MySQL 数据库 Navicat for MySQL ...
- c#将Excel数据导入到数据库的实现代码
这篇文章主要介绍了c#将Excel数据导入到数据库的实现代码,有需要的朋友可以参考一下 假如Excel中的数据如下: 数据库建表如下: 其中Id为自增字段: 代码: 代码如下: using Syste ...
随机推荐
- 初识phar反序列化&&复现bytectf_2019_easycms&&RSS思路
概要 来自Secarma的安全研究员Sam Thomas发现了一种新的漏洞利用方式,可以在不使用php函数unserialize()的前提下,引起严重的php对象注入漏洞.这个新的攻击方式被他公开在了 ...
- 用scrapy实现模拟登陆
class Test1sSpider(scrapy.Spider): name = 'test1s' allowed_domains = ['yaozh.com'] start_urls = ['ht ...
- testlink配置修改
1. Read/write permissions报错 问题: Checking if /var/testlink/logs/ directory exists [S] </B< ...
- ajaxReturn案例
请查看:http://www.cnblogs.com/bushe/p/4625097.html 不用自己写json格式啦,直接拿这个用就可以啦
- js点击事件,数字累加
<!doctype html><html lang="en"><head> <meta charset="utf-8&qu ...
- 13个Python图形库
By Django中国社区 at 2013-04-27 07:49 Python的13大图形库,matplotlib功能最强大,Cairoplot最漂亮,django-chartit与Django集成 ...
- 关于CompletableFuture的一切,看这篇文章就够了
文章目录 CompletableFuture作为Future使用 异步执行code 组合Futures thenApply() 和 thenCompose()的区别 并行执行任务 异常处理 java中 ...
- js 之 object
js之object 对象 ECMA-262 把对象(object)定义为“属性的无序集合,每个属性存放一个原始值.对象或函数”.严格来说,这意味着对象是无特定顺序的值的数组. 尽管 ECMAScrip ...
- java switch用法
为什么80%的码农都做不了架构师?>>> Java 7中,switch的参数可以是String类型了,这对我们来说是一个很方便的改进.到目前为止switch支持这样几种数据类型: ...
- 爱创课堂每日一题第十五题HTTP和HTTPS?
HTTP协议通常承载于TCP协议之上,在HTTP和TCP之间添加一个安全协议层(SSL或TSL),这个时候,就成了我们常说的HTTPS.默认HTTP的端口号为80,HTTPS的端口号为443. 转载于 ...