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 ...
随机推荐
- C# 静态变量、静态函数、实体变量、实体函数在一个类中的执行顺序
为了弄清这个代码,写了个测试,但是测试的结果和往上的代码有所差别,仁者见仁,智者见智了.如果我的测试用例用问题,欢迎指出. 首先,方法的是在被调用时执行,但是静态方法在所有地方都可以调用,应该在很早的 ...
- JS+Selenium+excel追加写入,使用python成功爬取京东任何商品~
之前一直是requests库做爬虫,这次尝试下使用selenium做爬虫,效率不高,但是却没有限制,文章是分别结合大牛的selenium爬虫以及excel追加写入操作而成,还有待优化,打算爬取更多信息 ...
- 漫谈LiteOS-端云互通组件-MQTT开发指南(下)
1.介绍 SDK简介 Agent Tiny是部署在具备广域网能力.对功耗/存储/计算资源有苛刻限制的终端设备上的轻量级互联互通中间件,您只需调用API接口,便可实现设备快速接入到物联网平台以及数据上报 ...
- 2019-2020-1 20199326《Linux内核原理与分析》第八周作业
可执行程序工作原理## 编译链接的过程### 示例程序hello.c #include<stdio.h> void main() { printf("Hello world\n& ...
- 一些软件的 Basic Auth 行为
一个 WBEM 在2003年的bug I'm trying to access the WBEM service of the CIMOM on the ESX Server 3i and all m ...
- js 实现动画功能,完整解析插件版 可更改配置参数[animate.js]
前言: 本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽. 本篇文章为您分析一下原生JS写一个运动插件 基本功能: 补充 ...
- Nest.js 6.0.0 正式版发布,基于 TypeScript 的 Node.js 框架
开发四年只会写业务代码,分布式高并发都不会还做程序员? Nest.js 6.0.0 正式版发布了.Nest 是构建高效.可扩展的 Node.js Web 应用程序的框架.它使用现代的 JavaSc ...
- telnet 636端口不通
今天发生了一件奇怪的事情,LDAP的636端口突然就不通了报错如下 [www@DC ~]$ telnet 10.219.90.173 636Trying10.219.90.173...Connecte ...
- jQuery里面click、this事件遇到(Django模型里for)相同的id名和class名想获取值
遇到的原型是这样的!下面我把它简化一下; click事件: 在浏览器里面只能获取横线上面的值,和下面的第一个值!! 这是因为id等级比class高,而且js要求id不能重复! 当 转载于:https: ...
- 剑指offer---05---用栈实现队列
题意 给了两个栈去实现队列 分析 两个栈如下情况 1 2 4 3 这个时候就不能够把4插入到第二个弹出栈了否则弹出顺序出错. 所以这个时候就应该等第二个栈空了的时候再 ...