import sys
import xlrd
import pymysql
import math
import json
from collections import OrderedDict # json 转换成对像
class JSONObject:
def __init__(self, d):
self.__dict__ = d # 异常处理
class MyError(Exception):
def __init__(self, v):
self.value = v def __str__(self):
return repr(self.value) # 读取数据
config = None with open('config.json', 'r') as f:
try:
config = json.load(f, object_pairs_hook=OrderedDict)
except IOError as err:
print("OS error: {0}".format(err))
sys.stdin.readline()
finally:
if sys.exc_info()[0] is not None:
print("else Unexpected error:", sys.exc_info())
sys.stdin.readline()
# raise MyError('else Unexpected error') fileList = []
# print(config)
for k in config:
if k == 'fileList':
for d in config[k]:
if config[k][d] == 1:
fileList.append(d) # 建立mysql连接
conn = pymysql.connect(
host=config['host'],
user=config['user'],
passwd=config['passwd'],
db=config['db'],
port=config['port'],
charset=config['charset']
) # 获得游标
cur = conn.cursor() for filename in fileList:
cur.execute('delete from ' + filename);
print(filename + ' 删除数据!')
book = xlrd.open_workbook('excel/' + filename + '.xlsx')
sheet = book.sheets()[0]
ops = []
nCols = sheet.ncols # 获取列表的有效列数
colName = 'insert into ' + filename
first = 0
flag = ','
# 表中的数据有单引号,直接拼接处理
if filename == 'tbl':
names = []
for r in range(0, sheet.nrows):
if first != 0:
flag = '^'
values = ''
itemSql = colName
for col in range(0, nCols):
value = sheet.cell(r, col).value
if isinstance(value, int):
values += str(math.floor(value)) + flag
elif isinstance(value, float):
values += str(math.floor(value)) + flag
else:
values += value + flag values = values[0:-1] # 第0行为字段行
if first == 0:
colName += '(' + values + ')' + ' values ('
else:
for d in values.split(flag):
itemSql += '"' + d + '",'
itemSql = itemSql[0:-1]
itemSql += ');'
# print(itemSql)
try:
cur.execute(itemSql)
except IOError as err:
print("OS error: {0}".format(err))
sys.stdin.readline()
finally:
if sys.exc_info()[0] is not None:
print("finally Unexpected error:", sys.exc_info())
sys.stdin.readline() first = 1 print(filename + ' 导入新数据!')
else:
for r in range(0, sheet.nrows):
if first != 0:
flag = '&'
values = ''
for col in range(0, nCols):
value = sheet.cell(r, col).value
if isinstance(value, int):
values += str(math.floor(value)) + flag
elif isinstance(value, float):
values += str(math.floor(value)) + flag
else:
values += value + flag values = values[0:-1] if first == 0:
colName += '(' + values + ')' + ' values ('
for j in range(0, nCols):
if j == nCols - 1:
colName += '%s)'
else:
colName += '%s, '
else:
ops.append(values.split(flag)) first = 1 # print(colName)
# print(ops)
try:
cur.executemany(colName, ops)
print(filename + ' 导入新数据!')
except IOError as err:
print("OS error: {0}".format(err))
sys.stdin.readline()
finally:
if sys.exc_info()[0] is not None:
print("finally Unexpected error:", sys.exc_info())
sys.stdin.readline() cur.close()
conn.commit()
conn.close() print('导入完成, 按任意键关闭...')
sys.stdin.readline()

python excel to mysql的更多相关文章

  1. python2.7爬取豆瓣电影top250并写入到TXT,Excel,MySQL数据库

    python2.7爬取豆瓣电影top250并分别写入到TXT,Excel,MySQL数据库 1.任务 爬取豆瓣电影top250 以txt文件保存 以Excel文档保存 将数据录入数据库 2.分析 电影 ...

  2. xlrd(excel导入mysql数据库)

    一.xlrd模块: python 对 excel 文件进行读操作 1.下载xlrd 并安装 http://pypi.python.org/pypi/xlrd wget https://pypi.pyt ...

  3. python3爬取”理财大视野”中的股票,并分别写入txt、excel和mysql

    需求:爬取“理财大视野”网站的排名.代码.名称.市净率.市盈率等信息,并分别写入txt.excel和mysql 环境:python3.6.5 网站:http://www.dashiyetouzi.co ...

  4. 实战|教你用Python玩转Mysql

    爬虫采集下来的数据除了存储在文本文件.excel之外,还可以存储在数据集,如:Mysql,redis,mongodb等,今天辰哥就来教大家如何使用Python连接Mysql,并结合爬虫为大家讲解. 前 ...

  5. Python中操作mysql的pymysql模块详解

    Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...

  6. Python excel 库:Openpyxl xlrd 对比 介绍

    打算用python做一个写mtk camera driver的自动化工具. 模板选用标准库里面string -> Template 即可 但要重定义替换字符,稍后说明 配置文件纠结几天:cfg, ...

  7. python——django使用mysql数据库(二)

    上一篇中,我们已经讲述了如何初始化一个django数据库,这一章就来讲讲在实际的项目中如何使用我们初始化的数据库呢? 如还未进行初始化数据库操作,请参考python——django使用mysql数据库 ...

  8. python——django使用mysql数据库(一)

    之前已经写过如何创建一个django项目,现在我们已经有了一个小骷髅,要想这个web工程变成一个有血有肉的人,我们还需要做很多操作.现在就先来介绍如何在django中使用mysql数据库. 前提:已经 ...

  9. Python 3 and MySQL

    http://stackoverflow.com/questions/4960048/python-3-and-mysql up vote61down votefavorite 20 I am usi ...

随机推荐

  1. iView表格行验证问题

    iView Table 3.2.0 版本 需求: 验证前两行的姓名不能为空: 解决方案: 判断是否前两行,如是则增加校验规则: 需在<FormItem>前加<Form>标签否则 ...

  2. PostgreSQL数据库查询最近几天的数据

    pgsql语法类似mysql  ,下面总结几个pgsql工作会用到的求时间的语句 1.当前时间向前推一天\ SELECT current_timestamp - interval '1 day' 例: ...

  3. vue入门:用户管理demo1

    该demo由前端请求后台服务器获取数据进行渲染 使用到的技术点 1.使用到的vue指令:{{}} v-if v-for v-model 2.使用到的事件:@click 点击事件, @keyup.ent ...

  4. GLFW+GLAD OpenGL Mac开发环境搭建

    前言 OpenGL 是什么?The Industry Standard for High Performance Graphics 这是官方解释.说白了他就是一套标准接口.对,是接口,并没有实现具体的 ...

  5. @Validated和@Valid区别

    注解地方 @Validated:可以用在类型.方法和方法参数上.但是不能用在成员属性(字段)上 @Valid:可以用在方法.构造函数.方法参数和成员属性(字段)上 两者是否能用于成员属性(字段)上直接 ...

  6. vue-cli2.X中引入高德地图,将其设为全局对象

    平时一般未用脚手架构建或用webpack构建的项目只要用script标签引入即可,在vue-cli 2.X构建的项目中,需要用如下方式引入高德地图: 首先在高德地图开放平台中注册开发者账号并获取key ...

  7. 设计模式(C#)——08组合模式

    推荐阅读:  我的CSDN  我的博客园  QQ群:704621321       游戏通常包含许多视图.主视图中显示角色.有一个子视图,显示玩家的积分.有一个子视图,显示游戏中剩下的时间.      ...

  8. Vue+webpack项目的多环境打包配置

    背景:由于需要将应用部署到线上开发环境.线上测试环境.线上预发环境.线上生产环境,而每个环境的访问地址是不同的.如果每次更改请求地址未免有些繁琐,就考虑在本地进行一次性配置. 代码管理工具:git 代 ...

  9. HDU - 2255 奔小康赚大钱 KM算法 模板题

    HDU - 2255 题意: 分配n所房子给n个家庭,不同家庭对一所房子所需缴纳的钱是不一样的,问你应当怎么分配房子,使得最后收到的钱最多. 思路: KM算法裸题.上模板 #include <i ...

  10. acm未解之谜-洛谷P1109学生分组

    把每一组的学生个数调度到一个给定区间范围内: 看了一圈题解,大佬都对原因避而不答: #include <iostream> #include <algorithm> using ...