看完这篇教程,你会了解到Python3导入Excel2007及以上版本的基本步骤,了解相关连接数据库的基本步骤,了解cx_Oracle、pymssql openpyxl等包的使用,和其他关于Pyhton3基础知识tuple、生成器和占位符。
业务需求
现在有一份从数据库导出的excel文件,第一行对应的是表字段名称,然后数据量也不是很大,现在需要导入到数据库,当然SQLserver可以直接导入excel,然后其他的数据库不晓得可不可行,然后这次我们要实现的就是利用python实现读取excel,然后存入对应的数据库。
这块主要用到了一些python3的模块有:
- 连接oracle的数据库,cx_Oracle 7.0;
- 连接SQLserver的数据库,pymssql 2.1.4
- 读取excel2007及以上版本,openpyxl 2.5.10
相关包介绍
1. cx_Oracle(官方文档:cx_Oracle)
首先,先看一份连接的事例代码
// 引入包
import cx_Oracle
//建立连接
conn = cx_Oracle.connect('用户名/密码@服务器地址/服务器名')
//实例 'test111/test12345@127.0.0.1/orcl'
//获取游标
cursor = conn.cursor()
//执行sql语句
cursor.execute("select address from temp_m_customer_addr_info where ID = '103791721'")
//取一行数据,游标自动向下移动一行
row = cursor.fetchone()
//打印取出的这行数据
print(row)
//关闭游标和关闭连接
cursor.close()
conn.close()
然后,我们来简单介绍下它的一些 其他用法(主要是游标对象cursor
的操作,因为它最常用)
Cursor.execute(statement, [parameters, ]**keywordParameters)
Cursor.executemany(statement, parameters, batcherrors=False, arraydmlrowcounts=False)
Cursor.fetchall()
Cursor.fetchmany([numRows=cursor.arraysize])
Cursor.rowcount
Cursor.rowfactory
2. pymssql (官方文档:pymssql)
同样我们也是先来看实例代码
// 引入包
import pymssql
//建立连接
conn = pymssql.connect(host='地址', user='用户名', password='用户密码', database='数据库')
//实例 host='127.0.0.1', user='sa', password='sa12345', database='test'
//获取游标
cursor = conn.cursor()
//执行sql语句
cursor.execute("select address from temp_m_customer_addr_info where ID = '103791721'")
//取一行数据,游标自动向下移动一行
row = cursor.fetchone()
//打印取出的这行数据
print(row)
//关闭游标和关闭连接
cursor.close()
conn.close()
从上面看出来,使用的方法它们之间貌似遵循着某种规范,使用起来都是很相似的,在这就不赘述了,其实它们之间还是会有点小区别的,主要体现在数据类型上,两者都会返回一个tuple,其中对应的数据类型会因为数据不同而返回不同的数据类型对象,到时候对应处理数据的时候,格外留意处理下即可。
3. openpyxl(官方文档:openpyxl)
还是照例上代码:
// 引入包
from openpyxl import load_workbook
// 根据地址,加载excel
wb = load_workbook(url)
// 获取对应的sheet
ws = wb['SC_MAGAZINE.SJ_DOCUMENT_17']
// 遍历ws里面 一行一行
for i, row in ws.rows:
print(i)
for cell in row:
print(cell.value)
我们本次业务只用到取值,但是写入有时候也是会需要的,我们接着来简单了解下其他的方法等
ws1 = wb.active 取出一个sheet(激活)
ws1.append(range(600)) 添加数据
ws2 = wb.create_sheet(title="Pi") 创建 名字为pi的sheet
wb.save(filename = ‘filename’) 保存这个excel
ws.merge_cells('A2:D2') 合并单元格
ws.unmerge_cells('A2:D2') 取消合并
Python3基础知识
这次业务里面用到了一些知识主要有:tuple、生成器、占位符等,我们就来了解了解,这样子积累,应该会比你枯燥的去看比较有意思,但是最终还是需要系统的看。我们开始吧!
1. tuple 元祖(推荐廖雪峰老师的文档:list和tuple)
有以下几个特点:
- tuple一旦初始化就不能修改
- 和list类似,表现为
t = ('nihao',1,'小子’,[1,2,3],'ceshi')
,用大括号括起来 ,而list使用中括号
tuple可以转化为list,使用list(tuple)
就可以转为list,自然tuple(list)
也可以将tuple转化为tuple
2. generator 生成器 (推荐廖雪峰老师的文档:generator)
在循环的过程中不断推算出后续,这种一边循环一边计算的机制,称为生成器:generator。
>>> L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x1022ef630>
创建L
和g
的区别仅在于最外层的[]
和()
,L
是一个list,而g
是一个generator。
3. %s
占位符
其实不止这一个占位符,还有%d
、%f
等等,列个表看看
格式 | 描述 |
---|---|
%% | 百分号标记 |
%c | 字符及其ASCII码 |
%s | 字符串 |
%d | 有符号整数(十进制) |
%u | 无符号整数(十进制) |
%o | 无符号整数(八进制) |
%x | 无符号整数(十六进制) |
%X | 无符号整数(十六进制大写字符) |
%e | 浮点数字(科学计数法) |
%E | 浮点数字(科学计数法,用E代替e) |
%f | 浮点数字(用小数点符号) |
%g | 浮点数字(根据值的大小采用%e或%f) |
%G | 浮点数字(类似于%g) |
%p | 指针(用十六进制打印值的内存地址) |
%n | 存储输出字符的数量放进参数列表的下一个变量中 |
当然常用的还是%d
、%f
、%s
用法是print("My name is %s" %("Alfred.Xue"))
,这些用法在Python3基础里面应该是不会提到太多,多积累,然后记忆起来对你编程速度会有很大提升。其中 %s 还会自动帮你去判断类型然后放入到占位符位置。
业务实现
业务实现主要就是结合上述的一些技术,然后进行for循环遍历来组合数据,写入数据库,没有特别的难点,此处就不在介绍,后续如果有类似的工作内容,在详细展示!