主要用到的库有xlrdpymysql, 注意pymysql不支持python3

篇幅有限,只针对主要操作进行说明

连接数据库

首先pymysql需要连接数据库,我这里连接的是本地数据库(数据库叫lds714610)。

conn = connect( host='localhost', port=3306, database='lds714610',
user='root', charset='utf8') # 主要通过cursor来对数据库进行查询,插入等一系列操作
cursor = conn.cursor() #在操作完所有操作后,提交修改,退出数据库
conn.commit()
conn.close()

从excel中读取数据

导入数据之前,需要先读取excel中的数据。

通过xlrd库读取到excel表的数据,返回的数据类型很单一,几乎都是字符类型。所以excel表格中的空也是用""表示的,而不是null或None。

# excel文件
# 第一步打开excel文件,类似普通的文件open操作。注意open_workbook的参数必须是unicode编码
book = open_workbook(fileName[i].decode('utf-8')) # 表格
# 一个excel文件中可能有多个表,可以通过sheets()方法返回关于所有表格的list列表
sheet = book.sheets()[0] #通过下标可以获取某一个表格 # 行 (元组)
# 下面获取一个表格内特定行的特定列的值
sheet.cell_value(i,j) #表格获取i行j列的值,一般会使用strip()去掉空格 # sheet有很多关于表格的属性
tolRows = sheet.nrows #表格的总行数

向pymysql中写入数据

之后说过对于pymysql通过cursor对数据库进行读写。

对于库pymysql,程序从中读取到的数据类型可能是string、float、datetime等。同时也是使用None表示数据库中的空值,pymysql中 insert into的value如果是空字串"",不会对应mySQL中的NONE,而是同样表示一个空字串。

# 查询
cursor.execute("select TID from Train where TName = %s", TName) # 获取查询结果,fetchall的结果是一个元组,它的每个元素也是元组,并且元素对应select的一个查询结果
# 如rows 可能是 ( (123,), (124,), (125,) ) 这种形式
rows = cursor.fetchall()
for r in rows:
print(r[0]) #输出TID
# fetchall(self):接收全部的返回结果行.
# fetchone(self):返回一条结果行.
# fetchmany(self, size=None):接收size条返回结果行 # 插入多行,rows可能包含多组[TID], 但通过executemany可以用一条语句插入全部
# 注意使用executemany向Mysql插入数据时,一律使用%s格式,即使插入的数据是数值, here %s is NOT formatter, but is a placeholder
cursor.executemany(“ insert into Train(TID) values(%s) ”, rows)

处理时间数据

使用的库是datetimexlrd

首先处理excel中的时间类型数据。在使用xlrd读取Excel表格中的日期格式时,读出的内容和原来Excel表格中的内容不一致。读取出来的是一个浮点数。导致不能正确使用。

而xldate_as_tuple方法可以很好地解决这个问题。获取excel中的时间数据使用xlrd的xldate_as_tuple方法。

from xlrd import xldate_as_tuple

# 参数一:要处理的单元格值
# 参数二:时间基准(0代表以1900-01-01为基准,1代表以1904-01-01为基准)
# return (year, month, day, hour, minute, nearest_second)
STime = xldate_as_tuple( sheet.cell_value(i,3), 0 )

datetime的数据格式

import datetime

#字符串转datetime
nowDateTime = datetime.datetime.strptime('2020-4-30', "%Y-%m-%d") # 直接指定年月日时分秒
nowDateTime = datetime.datetime(2020, 4, 30, 0, 0, 0) #datetime转字符串
nowDateTime.strftime("%Y-%m-%d %H:%M:%S") # 获取当前时间
today = datetime.datetime.now()

%Y-%m-%d %H:%M:%S 是datetime类型数据的一般格式,可以使用nowDateTime.date()方法去掉时分秒,但是得到的是datetime.date类型的数据,格式为 %Y-%m-%d

因此如果要将datetime中的时分秒清0,方法是先将其转为“%Y-%m-%d”格式的字符串,再将字符串转为datetime类型数据。

时间类型的计算

datetime类型可以很方便的进行时间上的运行,如计算1天后、10天前、5分钟后或1小时前的年月日时分秒。

# 计算5分钟后的时间
after5Min = nowDateTime + timedelta( minutes = 5 )
# 以此类推timedelta的形参还有days, hours等等

注意nowDateTime.date() + timedelta( minutes = 5 ) 的结果里,时分秒一直是0,因为它是date类型。

关于xlrd的例子 : https://xlrd.readthedocs.io/en/stable/api.html#xlrd-sheet

https://www.cnblogs.com/insane-Mr-Li/p/9092619.html

关于pymysql的例子 : https://www.cnblogs.com/huiyichanmian/p/11228192.html

我的github有一个详细例子,欢迎去fork或start (里面有相关的excel文件和python文件)https://github.com/dslu7733/mysql_exercise/blob/master/lab/%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BB%BF%E7%9C%9F%E6%95%B0%E6%8D%AE%E5%AF%BC%E5%85%A5/importData.py

利用python将excel数据导入mySQL的更多相关文章

  1. 使用python将excel数据导入数据库

    使用python将excel数据导入数据库 因为需要对数据处理,将excel数据导入到数据库,记录一下过程. 使用到的库:xlrd 和 pymysql (如果需要写到excel可以使用xlwt) 直接 ...

  2. 将Excel数据导入mysql数据库的几种方法

    将Excel数据导入mysql数据库的几种方法 “我的面试感悟”有奖征文大赛结果揭晓! 前几天需要将Excel表格中的数据导入到mysql数据库中,在网上查了半天,研究了半天,总结出以下几种方法,下面 ...

  3. Excel连接到MySQL,将Excel数据导入MySql,MySQL for Excel,,

    Excel连接到MySQL 即使当今时代我们拥有了类似微软水晶报表之类的强大报表工具和其他一些灵活的客户管 理应用工具,众多企业在分析诸如销售统计和收入信息的时候,微软的Excel依然是最常用的工具. ...

  4. navcat excel数据导入mysql的方法

    navcat excel数据导入mysql的方法 先navcat导出 xls格式 然后把数据复制到往这个xls里 (按照这个xls格式) 然后导入mysql就行了 如果导入的过程无法识别excel里的 ...

  5. 利用python将excel数据解析成json格式

    利用python将excel数据解析成json格式 转成json方便项目中用post请求推送数据自定义数据,也方便测试: import xlrdimport jsonimport requests d ...

  6. 将Excel数据导入MySql

    1.将选中的数据快儿拷贝到一个TXT文本文件中(记得把后面的空格消掉..),假如存到“D:\data.txt”这个位置里. 2.根据要导入的数据快儿建立MySql数据库和表,然后进入命令提示符里使用命 ...

  7. 利用workbench将excel数据导入到MySQL中

    数据导入的方式(csv,txt之类) 在MySQL中,数据导入的方式有两种方式 通过第三方客户端导入(workbench) 通过mysql client 方式导入 通过mysql clinet的导入方 ...

  8. 将 Excel 数据导入 MySql

    能承受上万数据量,速度快,并且使用了事务,不会出现某条数据错误而导致部分数据插入(要是全部成功要是一条都不成功,测试过程中没出现失败),需要的朋友可以参考下 1.NPOI 2.MySql.Data 这 ...

  9. 【MySQL笔记】Excel数据导入Mysql数据库的实现方法——Navicat

    很多公司尤其有点年头的公司,财务业务部门的各种表单都是excel来做的表格,随着互联网的发展各种业务流程都电子化流程化了,再在茫茫多的文档中去查找某一个年份月份的报告是件相当枯燥的事,所以都在想办法将 ...

随机推荐

  1. ScheduledThreadPoolExecutor之remove方法

    之前用定时任务的线程池,设置了个任务,但是突然今天产品说,某些个操作需要中断某些任务(如果任务还没有执行),使其不能再到点执行了.于是查了API果然有这样一个方法. 一看API,需要移除的是一个Run ...

  2. C 旅店

    时间限制 : - MS   空间限制 : - KB  评测说明 : 1s,256m 问题描述 一条笔直的公路旁有N家旅店,从左往右编号1到N,其中第i家旅店的位置坐标为Xi.旅人何老板总在赶路.他白天 ...

  3. 《Python Enhancement Proposal #8》要点 学习摘录

    <Python Enhancement Proposal #8> (8号python增强提案)又叫PEP8,他针对的python代码格式而编订的风格指南. 空白 使用space来表示缩进, ...

  4. 从春节送祝福谈谈 IO 模型(二)

    上期结合程序员小猿用温奶器给孩子热奶的故事,把面试中常聊的“同步.异步与阻塞.非阻塞有啥区别”简单进行普及. 不过,恰逢春节即将到来,应个景,不妨就通过实现新春送祝福的需求,深入了解一下 Java I ...

  5. 自动下载bing当日墙纸,并改变为gnome桌面壁纸

    写了一个手动白嫖当时bing的当日壁纸,并将其改变为gnome的壁纸,还是学到蛮多东东的 下一步的问题是加入到开机自启动项,使得开机后可以自动更新,目前已看到几篇博客 当然,也写了一个脚本使得可以恢复 ...

  6. 前端笔记(使用html\css\jquery造n*n的格子,根据预算购买到最多的商品)

    需求:创建一个n*n的格子,n是输入框的数字,点击重渲染可以重新画一个n*n的格子,鼠标移入格子中,对应的格子背景设变成红色,点击对应的格子,背景色变成蓝色,再点一次还原颜色. 要造格子有好几种方式, ...

  7. usdt钱包对接,usdt 对接交易平台,usdtapi,以太坊对接,以太坊代币对接

    usdt钱包对接,usdt 对接交易平台,usdtapi,以太坊对接,以太坊代币对接 自动充提币接口开发. 可对接:商城系统,游戏APP,交易平台,网站,各类APP -实现自动充提,查询,上链等功能接 ...

  8. 使用mpvue开发小程序如何定义全局变量

    我们创建好mpvue项目之后,找到src/main.js打开在后面添加一行代码 (注意:不能在const app = new Vue(App) 之前添加) Vue.prototype.globalDa ...

  9. 在IDEA导入maven项目

    1.依次打开File—New—Module from Existing Sources...

  10. 【图解】你还在为 TCP 重传、滑动窗口、流量控制、拥塞控制发愁吗?看完图解就不愁了

    每日一句英语学习,每天进步一点点: 前言 前一篇「硬不硬你说了算!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题」得到了很多读者的认可,在此特别感谢你们的认可,大家都暖暖的. 来了,今 ...