关键词:
先对Python操作Excel做进一步的介绍。测试表数据:
选择某一列数据:使用sheet['A:A']形式
结果如下:
(<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.A2>, <Cell 'Sheet1'.A3>, <Cell 'Sheet1'.A4>, <Cell 'Sheet1'.A5>, <Cell 'Sheet1'.A6>, <Cell 'Sheet1'.A7>, <Cell 'Sheet1'.A8>)
是一个元组,元组的元素为列中每一行的数据,是单元格对象。关注的重点是这个元组的长度,即选择数据的范围:
选择多列:ws['A:B']
结果为:
((<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.A2>, <Cell 'Sheet1'.A3>, <Cell 'Sheet1'.A4>, <Cell 'Sheet1'.A5>, <Cell 'Sheet1'.A6>, <Cell 'Sheet1'.A7>, <Cell 'Sheet1'.A8>), (<Cell 'Sheet1'.B1>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.B4>, <Cell 'Sheet1'.B5>, <Cell 'Sheet1'.B6>, <Cell 'Sheet1'.B7>, <Cell 'Sheet1'.B8>))
元组套元组,每一列的所有单元格组成一个内层元组的元素,有几列,就有几个内层元组。
选择一个工作表的全部单元格的值:ws.values
前面学过得到一个单元格的值是先获得单元格对象,然后使用value属性,即ws['A1'].value
整个工作表的数值用:ws.values,得到一个全部值的生成器
以一行数据位一个元组,有多少行就有多少个元组。也是元组套元组。
获取所有行数据,一行的各列单元格组成一个元组,ws.rows,其与ws.values结果类似,只是这里是获得的单元格对象。
获取所有列的数据,是一列中的所有行数据组成一个元组。ws.columns
上面的都是获取全部数据单元格,如果想获取一个指定区域的单元格:
使用ws.iter_rows()返回多行
使用ws.iter_cols()返回多列
min_row,min_col确定区域的左上角单元格,max_row,max_col确定右上角,min可以不设置,缺省就是从A1开始。最关键的是value_only参数,缺省是false,即取的是单元格对象,如果设为True,就取值。
Python使用数据库,创建表:
主要是创建表的SQL语句的形成。创建表的SQL语句:
create table [schema].tablename(
column1 datatype [primary key] [not null],
...
)
tablespace tablespacename
1、直接写SQL语句执行:
创建表的语句是直接写在程序中的。
2、拼接组合语句。
3、与Excel表结合,创建数据库表。
实践项目:
实际中使用的一个系统非常庞大复杂,其给出的查询功能只是简单的原始数据展示,现在想建一个数据库,将自己需要的一些数据导入其中,做自己想要的分析,第一步就是建立相应的数据库表。现在有这个系统的数据表的字典,格式大体如下:
现在想根据这个表来创建数据库表。
如果只是创建几个简单的表,用不着编程实现,现在的实际情况是,这个系统的数据库表超过了2000+,表中的字段数,大体看了一下,有很多表的字段数量到了400+ ,平均字段数在三四十的样子,就是只创建二三十个表,手写SQL语句也很要命,于是编程实现。
模拟数据:将真实表的前四列做修改,做数据分析,只需要导入数据,不需要生成,字段属性一列就不处理,这应该是一个外键,不在新建的表中体现。
难点是怎么根据这个excel表形成一个完整准确的create table语句。
思路:要想直接通过Excel表来形成SQl语句,难度很大,我考虑很久没有好的实现方法,于是,先对Excel表进行处理,形成一个有利于SQl语句拼接的格式,我使用字典。
根据excel表,形成一个字典,字典的键就是(表名,表名说明),值是一个列表list,列表的元素是一个list。
在根据这个字典形成SQL语句。
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import openpyxl
import cx_Oracle
con = cx_Oracle.connect('ehr','ehr','192.168.71.132/orclzdy')
curs = con.cursor()
destfile = '测试表.xlsx'
wb = openpyxl.load_workbook(destfile)
ws = wb['Sheet2']
for row in ws.iter_rows(min_row=2,values_only=True): # 演示一个row的内容,不是必须的
print(row)
dict_table =
for row in ws.iter_rows(min_row=2,values_only=True): #从表的第2行开始取数据,一行为一个元组,每一列的值是这个元组的元素
key_tmp = tuple([row[0],row[1]]) #形成一个元组,做字典的键,如第一个表的键就是('TABLE1','表1中文说明')
if key_tmp in dict_table.keys():
dict_table[key_tmp].append([]) #如果这个键在dict_table字典中存在,说明不是表的第一个字段,
# 先在键值对的值,即[[],[]]...]形式中增加一个空列表,作为新字段的容器。
end_index = len(dict_table[key_tmp]) - 1 # 找到刚添加的空列表在外层列表的索引位置
dict_table[key_tmp][end_index].append(row[2]) # 添加字段名
dict_table[key_tmp][end_index].append(row[3]) # 添加字段说明
dict_table[key_tmp][end_index].append(row[4]) # 添加数据类型
if row[6] =='' or row == None:
dict_table[key_tmp][end_index].append('') # 如果excel第7列为空,添加‘’
else:
dict_table[key_tmp][end_index].append(' primary key') # 如果excel第7列不为空,即为主键,添加‘ primary key’
if row[7] =='' or row == None: # 同上,判断是否添加 ‘ not null',注意前面都有一个空格
dict_table[key_tmp][end_index].append('')
else:
dict_table[key_tmp][end_index].append(' not null')
continue # 处理完一个字段,继续循环下一个字段
dict_table[key_tmp] = [[row[2],row[3],row[4]],] # 如果key_tmp这个键在dict_table字典中不存在,那就是一个新表的第一个字段
# 直接在字典中添加这个键,同时要添加第一个字段的相关信息
if row[6] == '' or row == None:
dict_table[key_tmp][0].append('')
else:
dict_table[key_tmp][0].append(' primary key')
if row[7] == '' or row == None:
dict_table[key_tmp][0].append('')
else:
dict_table[key_tmp][0].append(' not null')
print(dict_table) # 看一下最后形成的字典,不是必须的
# 先查询一下当前数据库的表
curs.execute("select table_name from user_tables")
result = curs.fetchall()
print("执行语句前的表-----start")
for row in result:
print(row)
print("执行语句前的表-----end")
# 下面遍历dict_table字典,拼接组成SQl语句,并执行
for k,v in dict_table.items():
sql = 'create table ' + k[0] + '('
i = 0
for vv in v:
i += 1
if i < len(v):
sql = sql + vv[0] + ' ' + vv[2] + vv[3] + vv[4] + ',' # 如果不是表的最后一个字段,则最后是一个逗号
else:
sql = sql + vv[0] + ' ' + vv[2] + vv[3] + vv[4] + ')' # 如果是表的最后一个字段,则最后是一个右括号
sql = sql + ' tablespace users' # 最后加上表空间
print(sql) #查看最后形成的SQL语句
curs.execute(sql) # 执行创建表的语句,在数据库中创建表
for k,v in dict_table.items():
sqlcomm_t = 'comment on table ' + k[0] + ' is ' + "'" + k[1] + "'" # 给表添加说明
print(sqlcomm_t)
curs.execute(sqlcomm_t)
for vv in v:
sqlcomm_f = 'comment on column ' + k[0] + '.' + vv[0] + ' is ' + "'" + vv[1] + "'"
print(sqlcomm_f)
curs.execute(sqlcomm_f)
curs.execute("select table_name from user_tables")
result = curs.fetchall()
print("执行语句后的表-----start")
for row in result:
print(row)
print("执行语句后的表-----end")
wb.close()
curs.close()
con.close()
最后的结果:
这个程序只能执行一次,第二次执行因为表已经存在会出错。可以添加一个循环,在建表前,先删除表。
人工智能零基础如何自学入门
...道长一、语言希望在进入这个领域之前至少得会一门语言Python。后面可以学学C或者C++,很多源码也是C和C++的二、数学,以及不想做调包侠的话,学通透得有比较好的数学基础:微积分线性代数概率论如果数学基础不好可以先补... 查看详情
自学python入门要买什么书?
文章目录1、《Python编程:从入门到实践》2、《Python编程快速上手让繁琐工作自动化》3、《Python基础教程第3版》4、《Python核心编程(第3版)》5、《Python3网络爬虫开发实战》6、《Python神经网络编程》自学python入门要... 查看详情
python基础入门自学——22--异步io
CPU的速度远远快于磁盘、网络等IO。在一个线程中,CPU执行代码的速度极快,然而,一旦遇到IO操作,如读写文件、发送网络数据时,就需要等待IO操作完成,才能继续进行下一步操作。这种情况称为同步IO... 查看详情
python基础入门自学——18--操作excel-工作实践需求(代码片段)
工作中突然要操作一堆Excel表格,就想着能否用Python来处理,这一篇就学习一下Python操作Excel表。我需要在一个内网环境安装python开发环境,在网上下载了pycharm2018,好像再新的版本没有windows32位的版本了。安装... 查看详情
python基础入门自学——21--web开发(代码片段)
B/S架构已经是最流行的开发架构,必须学一学。HTTP协议——在Web应用中,服务器把网页传给浏览器,实际上就是把网页的HTML代码发送给浏览器,让浏览器显示出来。而浏览器和服务器之间的传输协议是HTTP,... 查看详情
python基础入门自学——19--访问数据库(代码片段)
继续前面的工作需求解决:具体项目3:对于每个单位的考核结果进行分析,如果连续2个月出现红牌,要给与警告,连续3个月及以上的,要处罚,我们要实现的就是给出提示,连续2次出现红牌的月... 查看详情
不容错过,零基础入门python学习路线最佳实践(代码片段)
今天我们来分享零基础入门Python,应该如何自学,自学的路径是怎么样的,内容是从入门到进阶,既有教程,也有经典书籍推荐,还有众多类库介绍,不要错过哦文章目录文档教程Python官方文档廖雪峰... 查看详情
python基础:python入门介绍
文章目录Python入门介绍一、什么是Python?二、Python历史三、学习Python优势四、Python受欢迎的9个原因五、Python的未来六、总结Python入门介绍14天学习训练营导师课程:杨鑫《Python自学编程基础》杨鑫《Python网络爬虫基础》... 查看详情
如何学习python,以及新手如何入门
学习Python主要有自学和报班学习的方式,新手不建议自学,容易没有方向效率低下。python是一门语法优美的编程语言,不仅可以作为小工具使用提升我们日常工作效率,也可以单独作为一项高新就业技能!所以学完Python编程之后... 查看详情
必须收藏零基础自学python资源大全,学完这些自学python学习资料,找工作不用愁
这是一篇Python入门指南,针对那些没有任何编程经验,从零开始学习Python的同学。不管你学习的出发点是兴趣驱动、拓展思维,还是工作需要、想要转行,都可以此文作为一个参考。在这个信息爆炸的时代,... 查看详情
编程0基础小白,如何自学python更快、更高效!「方法干货」
参考技术A作为零基础的小白学python,普遍会遇到一个问题:没有找到应用场景。大多数小白在自学一门编程语言时,是没有应用的场景感。说白了,就是不知道学了做什么用,讲不出具体、合理的应用。如果这时候有大佬带着... 查看详情
python自学免费教程-怎样自学python编程?从零开始学习python,python开发入门到精通(代码片段)
我做为千万个零基础自学Python转行程序员的成功案例之一,在自学的过程中,踩过很多坑,整理过很多非常优质的免费资料,对于新手小白来说,这些资料一定可以为你提供参考。如果你是小白,我给你整... 查看详情
有零基础开始自学python的小伙伴吗?怎么样可以快速入门?
参考技术A有人说学习python难度高,其实这种情况是根据学习能力来决定的。对于初学者和完成普通任务,Python语言是非常简单易用的。当然了Python具有丰富库的,想要更高深的学习Python,同样是一件比较困难的事情。我们先来... 查看详情
必须收藏零基础自学python资源大全,学完这些自学python学习资料,找工作不用愁
这是一篇Python入门指南,针对那些没有任何编程经验,从零开始学习Python的同学。不管你学习的出发点是兴趣驱动、拓展思维,还是工作需要、想要转行,都可以此文作为一个参考。在这个信息爆炸的时代,... 查看详情
必须收藏零基础自学python资源大全,学完这些自学python学习资料,找工作不用愁
这是一篇Python入门指南,针对那些没有任何编程经验,从零开始学习Python的同学。不管你学习的出发点是兴趣驱动、拓展思维,还是工作需要、想要转行,都可以此文作为一个参考。在这个信息爆炸的时代,... 查看详情
零基础程序员自学编程的6种方法,你知道吗?
...P从入门到放弃,C语言从入门到放弃,Java从入门到放弃,Python从入门到放弃...在自学编程的过程中,一部分程序员遇到冰冷的英语字母,枯燥的编程教程,果断选择了放弃。但其实自学编程不是那么难,只要是逻辑思维或者理科... 查看详情
python入门自学进阶-web框架——21djangoadmin项目应用(代码片段)
客户关系管理。以admin项目为基础,扩展自己的项目。一、创建项目二、配置数据库,使用mysql数据库:需要安全mysqlclient模块:pipinstallmysqlclientDATABASES='default':'ENGINE':'django.db.backends.mysql 查看详情
python入门需要学些啥?
Python相对比较简单,零基础也能学。系统学习的话,一般4-6个月左右能学好。建议大家可以从以下三方面来入手:①先自学一些python书籍大家可以从书中了解一些基础知识,建立一些编程认知。但是这样的方式,还是难免会因为... 查看详情