今日内容概要
今日内容详细
openpyxl模块
# 下载
pip3 install openpyxl
# 使用
'''openpyxl内部读写也是分离的 需要你调用不同的方法才能完成'''
from openpyxl import Workbook
# 导入工作簿
# 生成一个工作簿对象
wb = Workbook()
# 利用该工作簿对象即可操作excel表格
# wb1 = wb.create_sheet('哈哈') # 在excel文件内新建一个哈哈的工作表
wb1 = wb.create_sheet('哈哈',0) # 在excel文件内新建一个哈哈的工作表
# 后面的数字用来指定创建的工作表在excel文件内的位置
# wb1.title = '嘿嘿嘿' # 还可以通过title属性修改工作表的名称
# 1.通过代码操作excel单元格需要使用坐标
wb1['A3'] = 666
# 2.还可以通过关键字的形式 明确行和列 cell是单元格的意思
wb1.cell(row=3,column=4,value=999) # row是行 column是列 value是数据
wb1['A4'] = 123
wb1['A5'] = 321
wb1['A6'] = '=sum(A4:A5)'
# 保存excel文件
wb.save('我的第一个excel文件.xlsx')
# 进阶操作
from openpyxl import Workbook
wb = Workbook()
wb1 = wb.create_sheet('test',0)
# 表格肯定有表头和表单
"""
表头就是excel表格的列名称
表单就是excel表格的行数据
"""
# 直接使用append添加列表数据 列表里面的元素都会在一行展示出来
wb1.append(['用户名','年龄','性别','手机号'])
# 表单数据的添加 append一次就是一行
wb1.append(['jason',18,'男',110])
wb1.append(['egon',73,'男',120])
wb1.append(['frank',84,'男',130])
wb1.append(['tony',32,'男',140])
# 少录一列数据
# wb1.append(['tony','男',140]) # 直接前移
# 缺失数据
wb1.append(['kevin','','男',140]) # 支持录入空数据
wb.save('111.xlsx')
# 读操作
from openpyxl import load_workbook
wb = load_workbook('111.xlsx')
# 获取到excel表格中所有的工作表名称
# print(wb.sheetnames) # 结果是一个列表 ['test', 'Sheet']
# 指定你要获取的工作表
# wb1 = wb['哈哈']
wb1 = wb['test'] # 获取test工作表 wb1就指代test工作表
# 获取数据 统一都需要.value才可以获取到
# res = wb1['A4'].value # 获取A2单元格里面的数据
# print(res)
# 获取公式单元格数据 获取到的是公式而不是结果
# res1 = wb1['A6'].value
# print(res1) # =sum(A4:A5)
# 获取数据的第二种方式
# res2 = wb1.cell(row=3,column=4).value
# print(res2)
# 在读取excel表格数据之前 我们通常先查看当前excel表格有几行几列数据
print(wb1.max_row) # 6行
print(wb1.max_column) # 4列
# print(wb1.rows) # <generator object Worksheet._cells_by_row at 0x0000017E63683F10>
# for row in wb1.rows:
# # print(row) # (<Cell 'test'.A1>, <Cell 'test'.B1>, <Cell 'test'.C1>, <Cell 'test'.D1>)
# # 对数据行对象进行for循环获取一个个单元格的数据
# for data in row:
# print(data.value)
# print(wb1.columns)
# for column in wb1.columns:
# # print(column)
# for data in column:
# print(data.value)
"""
generator
只要你看到generator关键字 说明这个东西可以被for循环
"""
官方文档
https://pypi.org/project/openpyxl/ # 官网
https://openpyxl.readthedocs.io/en/stable/ # 详细的文档
https://openpyxl.readthedocs.io/en/stable/tutorial.html # 详细的教程
from openpyxl import Workbook
wb = Workbook()
ws1 = wb.active # 不创建新的工作表 直接用第一个sheet
# ws2 = wb.create_sheet() # 再创建新的工作表
ws1.title = '主表'
ws1['A1'] = '求求你们用点心 好好学!'
ws1.sheet_properties.tabColor = "FF2DE00F"
target = wb.copy_worksheet(ws1)
# res = ws1['A1:C6'] # 依次获取每个单元格里面的数据
# for t in res:
# for data in t:
# print(data.value)
res = ws1[1:5]
print(res)
"""
取色
1.利用微信或者qq截图下面有颜色代码
2.利用pycharm提供的取色器
"""
# wb.save('333.xlsx')
"""
save 如果不执行 那么上述所有的操作都是在内存中进行的
"""
MongoDB数据库
# 参考文档:https://www.cnblogs.com/xiaoyuanqujing/articles/11805775.html
关系型数据库
MySQL、oracle、acess、postgresql、db2、sqlite
非关系型数据库
redis、mongodb、memcache
MongoDB是一个面向文档(document-oriented)的数据库,而不是关系型数据库
1.易用性
数据操作更加的简单方便扩展性更高
采取的是类似于key:value的形式存储数据
2.易扩展
MongoDB支持横向扩展
# 纵向扩展和横向扩展的含义
应用程序数据集的大小正在以不可思议的速度增长。随着可用带宽的增长和存储器价格的下降,即使是一个小规模的应用程序,需要存储的数据量也可能大的惊人,甚至超出
了很多数据库的处理能力。过去非常罕见的T级数据,现在已经是司空见惯了。
由于需要存储的数据量不断增长,开发者面临一个问题:应该如何扩展数据库,分为纵向扩展和横向扩展,纵向扩展是最省力的做法,但缺点是大型机一般都非常贵,而且
当数据量达到机器的物理极限时,花再多的钱也买不到更强的机器了,此时选择横向扩展更为合适,但横向扩展带来的另外一个问题就是需要管理的机器太多。
MongoDB的设计采用横向扩展。面向文档的数据模型使它能很容易地在多台服务器之间进行数据分割。MongoDB能够自动处理跨集群的数据和负载,自动重新分配文档,以及将
用户的请求路由到正确的机器上。这样,开发者能够集中精力编写应用程序,而不需要考虑如何扩展的问题。如果一个集群需要更大的容量,只需要向集群添加新服务器,MongoDB就会自动将现有的数据向新服务器传送
3.丰富的功能
1.索引(类似于书的目录用于加快查询速度)
2.聚合
3.特殊的集合类型
4.文件存储
4.卓越的性能
MongoDB的一个主要目标是提供卓越的性能,这很大程度上决定了MongoDB的设计。MongoDB把尽可能多的内存用作缓存cache,视图为每次查询自动选择正确的索引。
总之各方面的设计都旨在保持它的高性能
虽然MongoDB非常强大并试图保留关系型数据库的很多特性,但它并不追求具备关系型数据库的所有功能。只要有可能,数据库服务器就会将处理逻辑交给客户端。这种精简方式的设计是MongoDB能够实现如此高性能的原因之一
"""
MongoDB是唯一一款看上去像关系型数据库的非关系数据库
"""
MongoDB重要概念
MySQL MongoDB 结束
database database 数据库
table collection 数据表/集合
row document 数据行/文档
column field 列字段/域
index index 索引
table joins 连接表/不支持
primary key primary key 主键/MongoDB会自动将_id字段设置为主键
文档
文档是MongoDB的核心概念。文档就是键值对的一个有序集{'msg':'hello','foo':3}。类似于python中的有序字典。
需要注意的是:
#1、文档中的键/值对是有序的 (python中的字典键值对是无序的)
#2、文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
#3、MongoDB区分类型和大小写。(MySQL默认不缺分大小写)
#4、MongoDB的文档不能有重复的键。
#5、文档中的值可以是多种不同的数据类型,也可以是一个完整的内嵌文档。文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。
文档键命名规范:(遵循变量名的命名并且做到见名知意就可以了)
#1、键不能含有\0 (空字符)。这个字符用来表示键的结尾。
#2、.和$有特别的意义,只有在特定环境下才能使用。
#3、以下划线"_"开头的键是保留的(不是严格要求的)。
集合
类似于MySQL里面的表
数据库
在MongoDB中,多个文档组成集合,多个集合可以组成数据库
数据库也通过名字来标识。数据库名可以是满足以下条件的任意UTF-8字符串:
#1、不能是空字符串("")。
#2、不得含有' '(空格)、.、$、/、\和\0 (空字符)。
#3、应全部小写。
#4、最多64字节。
有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。
#1、admin: 从身份认证的角度讲,这是“root”数据库,如果将一个用户添加到admin数据库,这个用户将自动获得所有数据库的权限。再者,一些特定的服务器端命令也只能从admin数据库运行,如列出所有数据库或关闭服务器
#2、local: 这个数据库永远都不可以复制,且一台服务器上的所有本地集合都可以存储在这个数据库中
#3、config: MongoDB用于分片设置时,分片信息会存储在config数据库中
补充
表里面的一行数据对应到mongodb中
其实就是一个类似于字典的字典数据
下载与安装
1.直接去官网下载 解压
2.将bin文件路径添加到环境变量中
3.终端输入mongo即可
mongo.exe 客户端
mongod.exe 服务端
作业