内容回顾
- 进程 线程 协程之间的相同点和不同点
- 进程 : 内存隔离 操作系统级别 开销大 可以利用多核 计算机中资源分配的最小单位
- 线程 : 内存共享 操作系统级别 开销中 Cpython解释器下不能利用多核 计算机中CPU调度的最小单位
- 协程 : 内存共享 用户级别 开销小 不能利用多核
- 协程 : 生产者消费者模型 进程模块提供的队列joinablequeue
- from queue imort Queue
- 相同点 : 都能够帮助我们实现并发操作,规避IO时间,提高程序执行效率
- 进程内存之间是否共享,如何实现通信
- 不共享
- 基于文件
- 队列 管道 manager
- 基于网络
- 第三方工具(redis kafka memcache rabbitMQ) socket
- 在python中是否线程安全
- 不安全
- python你写的python代码未来都会转换成机器码,机器码执行的过程中
- 如果有一个非原子性操作,那么就会导致线程数据不安全
- 需要手动加锁来解决问题
- 协程的本质是什么
- 多个任务在一条线程上能够实现切换
- 线程池开启任务
- 如何开启线程池,如何提交任务,获取返回值
from concurrent.futures import ThreadPoolExecutor
def func(arg):
return arg * 20
tp = ThreadPoolExecutor(5)
ret_l = []
for i in range(100):
ret = tp.submit(func,i)
ret_l.append(ret)
for r in ret_l:
print(r.result())
- 二
from concurrent.futures import ThreadPoolExecutor
def func(arg):
return arg * 20
tp = ThreadPoolExecutor(5)
ret_l = tp.map(func,range(100))
for r in ret_l:
print(r)
协程复习 :
数据是否安全 : 绝对安全
a = 1
def func1():
global a
a += 1
def func2():
global a
a += 1
- 和线程的关系
- 本质就是一条线程
- gevent模块
- g1 = spawn(协程函数,参数)
- g1.join()
- gevent.joinall([g1])
- monkey.patch_all()
- greenlet switch
- 并没有减少io操作
import time
from gevent import monkey
monkey.patch_all()
print(time.sleep)
<built-in function sleep>
<function sleep at 0x0000023FEBF62378>
数据库
- day1.介绍数据库\安装\基础的命令
- day2.数据库的表操作
- day3.数据库的数据操作,查询(单表\多表)
- day4.查询和其他内容的拾遗
- day5.索引原理和python操作mysql
- 今天的内容
- 介绍数据库\安装\基础的命令
- 数据库在开发的过程中占据着什么样的位置?
- 在整个项目中又有什么意义?
- 我们把数据存储在文件里
- 写 write
- 读 read
- 改 读->写->删->改
数据库 : 能够更加简单的 使用 存储在文件中的数据
- 能够更好的解决并发问题
- 数据的统一问题
数据
- alex,alex3714 * 一行内容就是一条数据
- python,19800,6 months * 一条数据
数据库 DataBase DB
- 存储数据的地方,我们把所有的数据都存储在一个固定的
- 地方,那么这个地方就是数据库
数据库管理系统 DBMS
- 负责管理数据仓库中存储的所有文件中的内容
- 能够更好(简单 高效 安全)的帮助我们完成数据的增删改查
数据库服务器
- 什么是服务器 : 本质就是一台计算机
- 当一台计算机上安装了某个软件能够对外提供服务的时候,那么这台机器就成为服务器
- 数据库服务器
- 当这台机器上安装的服务是一个数据库
- server端的时候,我们就得到了一台数据库服务器
数据库管理员 DBA
- 专门帮助我们管理数据库 并且优化数据库的工作人员
- mysql就是一个DBMS(能够管理硬盘上数据文件的一个软件)
- 通过一些固定的简单的指令 帮助我们完成从文件中查找对应数据的软件
- oracle 也是一个DBMS
查 name,id 从 userinfo 条件 age = 83
查 number 从 userinfo 条件 name='wusir'
数据库管理系统的作用:
- 关系型数据库
- 非关系型数据库
mysql 开源的软件 - 小公司 各种互联网公司(二次开发之后的mysql)
- oracle 付费的 - 金融行业 国企事业单位
- sql server 在学校里教学使用的
数据库的安装与卸载
问题
- D:\mysql\mysql-5.6.43-winx64安装目录中不能有空格和中文
- my.ini文件是不是utf-8
- 配置文件里的每一个路径的最后 是不是有看不见的空格
- 文件的名 my.ini
- 安装包
卸载
- D:\mysql\mysql-5.6.43-winx64\mysqld remove 移出服务
- 把mysql整个文件都删掉\环境变量也删掉
- 重启电脑
最后的两招
- 换一个目录装
- vc运行库
一堆命令
什么是环境变量?
当我们执行一个系统中的可执行文件的时候
例如 mysql.exe或者 mysqld.exe或者python.exe
如果我们不配环境变量,
那么就需要进入mysql.exe所在的目录去执行
或者带着这个文件的绝对路径去执行
我们经常要执行这些文件
所以把文件的路径添加到环境变量中
就可直接输入文件名来执行程序了
mysqld install
mysqld.exe install 要安装mysql的server端
net start mysql 启动server端
mysql -uroot -p 启动client端
#重启server
net stop mysql
net start mysql
client端的启动
c://>mysql -uroot #表示没有密码的情况下用root用户登录
c://>mysql -uroot -p #表示使用密码登录
Enter password:#输入密码,如果没有密码直接回车
mysql > select user(); #查看当前用户
set password = password('123');#给当前用户设置密码
#查看当前的所有数据库
mysql > show databases;
#root用户在mysql当中相当于管理员用户
#其他的程序员想要使用数据库来存储项目数据,不能给他权限最高的管理员用户
可以创建用户 并且给用户授权
create user 'eva@192.168.16.%';
create user 'eva@192.168.16.%' identified by '123';
#既可以给一个已经存在的用户授权,也可以给一个不存在的用户创建并授权
grant 权利 on 数据库名.表名 to '用户名@ip地址'
grant 权利 on 数据库名.表名 to '用户名@ip地址' identified by '123';
* 权利 : SELECT INSERT UPDATE DELETE ALL
#创建一个数据库 s20_day1
create database s20_day1;
#创建一个stu用户 密码是123 ip地址是192.168.16网段的所有机器
能对这个数据s20_day1做增删改查的所有操作
grant all on s20_day1.* to 'stu@192.168.16.%' identified by '123';
192.168.16.13
mysql -ustu -h192.168.16.13 -p
123
grant all on s20_day1.* to 'stu'@'192.168.16.%' identified by '123';
#用户名 密码 ip地址
mysql -u用户名 -hip地址 -p 密码
ddl语言
- 文件夹(数据库)的增删改查
- 创建数据库
- create database 数据库名;
- 使用数据库
- use 库名;
- 查看数据库下有哪些表
- show tables;
- 创建数据库
- 表的增删改查
- 创建表
- create table 表名(字段名 数据类型(长度),字段名2 数据类型(长度),..)
- 查看表结构
- desc 表名;
- 修改表
- alter table t1 change name username char(12);
- 删除表
- drop table t1;
- 创建表
dml语言
- 数据的增删改查
- 增加
- insert into 表名 values (值1,值2,...); 插入一条数据
- insert into 表名 values (值1,值2,...),(值1,值2,...),(值1,值2,...); 插入多条数据
- 查看数据
- select * from 表名;
- 修改数据
- update 表 set 字段名=值 where 条件;
- 删除数据
- delete from 表 where 条件;
my.ini
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir = D:\mysql\mysql-5.6.43-winx64
# 设置mysql数据库的数据的存放目录
datadir = D:\mysql\mysql-5.6.43-winx64\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB(base)