4yue 22
1
# 1 . 进程 线程 协程 之间的相同点和不同点 #相同点:都能帮助我们实现并发操作,规避IO时间,提高执行效率 #进程:内存隔离 操作系统级别 可以利用多核(高计算) 计算机中资源分配的最小单位 #线程:内存共享 操作系统级别 开销中 Cpython解释器下不能利用多核(规避IO) 计算机CPU调度的最小单位 #协程:内存共享 用户级别 开销小 不能利用多核(协程的本质是个单线程)(规避IO) ''' 操作系统级别:全世界的人都存储在大计算机上,他都知道哪个好那个坏 用户级别: 自己去判断哪个好哪个坏 switch 是手动添加的 gevent 里为什么没有? 因为他在底层添加了(可能是if) ''' # 为什么不能删GIL锁 #垃圾回收机制 所以 cpython # 2 .进程内存之间是否共享,如何实现通信? #不共享 通过python模块\第三方工具 # 本质上: # 基于文件 : #队列 管道 manager # 基于网络 #第三方工具(redis kafka memcha) socket # 3在python 中是否线程安全 #不安全 #python 你写的python代码未来都会转换成机器码,机器码执行的过程中 #如果有一个非原子性操作,那么就会导致线程数据不安全 #需要手动加锁来解决问题 # 4 协程的本质是什么 #多个任务在一个线程上能够实现切换 (与IO无关利用协程实现的一个效果) #5 线程池开启任务 如何提交任务 获取返回值 ''' 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 = tp.map(func,range(100)) for r in ret : print(r) # 没有返回值 直接打印 ''' #协程复习: #数据是否安全 : 绝对安全 # 用户级别的 只能在代码上做 没法 swithch a+=1 swithch 没有把a+=1 分开 a = 1 def func1(): global a a+= 1 def func2(): global a a+=1 import dis dis.dis(func1) dis.dis(func2) #和线程的关系 #本质上是一条线程 # gevent 模块 #g1 = spawn(协程函数,参数) #g1.join #主程序里不遇到阻塞,不切到子程序里(一个协程) start没有用不执行 # gevent.joinall(iterable([g1])) #monkey.patch_all() # greenlet switch # 并没有减少IO操作 ''' def fun1(): start sleep # 其实是自己实现了一个sleep,而没有用time的 end def fun2(): begin sleep1 finish ''' # socket 底层就是用thread实现的 # 举一反三 做了一个 想象把他换成别的情境 # 问题 # 协程用的好 比线程的效率要好的多 # 协程的底层 IO切换 是 time # 先把懂了的整理出来 再弄不懂得
2
#day 1 数据库的介绍安装 命令 #day 2 数据库的表操作 #day 3 数据库的数据操作,查询(单表\多表) 一天 ftp这几天 要做完 #day 4 查询和其它内容的拾遗 # day 5 索引原理 # 数据库在开发的过程中占据着什么样的位置? #在整个项目中又有什么意义? # 我们把数据存储在文件里 (把数据永远存下来) #写 write #读 read # 改 读-》写->删->改-》 # 数据库:(意义) # 能够更加简单的 使用 存储在文件中的数据 # 查 一行数据 从userinfo 条件 id = 10 或者 id = 20 #简单 比那一行 要简单 #不止读写改 还优化了效率(?为什么 没听清 not listened) # 能够更好地解决并发问题 #买票问题 你是为你的用户服务的 但是对于 数据库 你也是服务端 #python 中到处都是相对论 #自带的并发 不用自己写server # 数据的统一问题 # 1,alex,alex3714 #一行内容就是一条数据 # 2,python,19800,6,months # 一条不同的数据 # 数据库 DataBase 简称DB # 存储数据的地方, 我们把所有的数据都存储在一个固定的地方,那么这个地方就是数据库 #数据库管理系统 DBMS #软件 需要我们安装一下 #能够帮助我们更好的管理 #和使用存储在硬盘上的数据 #操作系统 #硬盘上存储着数据 # 数据库 服务器 #什么是服务器 : 本质上就是一条计算机 (对外提供服务) #当一台计算机上安装了某个人软件能够对外提供服务的时候,那么这台机器就成为服务器 #数据库服务器 #当这台机器上安装的服务是一个数据库的server ,就得到了一个。。。。 #数据库管理软件:管理-数据库 # 数据库管理员DBA # (删库的人 有权限。。。) #专门帮我们管理数据库 并且优化数据库的工作人员 # 数据库 技术的发展 #纸 上表格 #excel #软件 批处理 软件:(把你频繁的要做的变成机器去做了) # mysql 就是一个DBMS(能够管理硬盘上数据的一个软件) # 通过固定的简单的指令 帮助我们完成从文件中查找对应数据的软件 #mysql不好用,自己写,程序员的责任 好用就算了 不想用别的找不到缺点 #软件那个没有缺点,就像人一样,一秒变笨,改错则少 #无知才会求知 有错才会改错 #笨才会求聪明 #oracle 也是一个DBMS # 数据库 管理系统的作用 #关系型数据库 (mysql\oracle\sql server(微软里的底层服务) \sqllite) #(关系比较紧) # 这几个用法都差不多 都是传上去 拉下来 不同的相同的 # (每个每个都对应 肯定慢) #id name age phone_num #是有关系的 彼此之间 #知道了一个人的名字能不能获取到他的年龄, #知道了一个人的电话号码,能不能获取到姓名 #非关系型数据库 (redis\ mongodb) #既可以完成通信也可以。。。 mon智能机器人(选修第四个)轻量级 #(效率高 1对多 ) #key : value key---> value 只知道value找不到key #只有一个找所有 # mysql 开源的软件 -小公司 各种互联网公司(二次开发之后) #开源 可能有的漏洞 被人操作了 #很多地方不如oracle 严谨 #金融公司 不会使用mysql存储数据的 。。。数据库被泄露了 只就是一个数字了。。。 #oracle 付费的 #金融行业(绝对安全) #国企事业单位 #sql server 在学校里教学使用的
传的话 可能会出错,不要相信任何人的软件 从官网上安装最安全
以后进公司
3员工系统
#写一个员工管理软件 #1,alex,38,1233333333,过气网红讲师 #2,wusir,74,1388888888,python讲师 # 查name,id 从 userinfo 条件 age = 83 # 查number, 从 userinfo 条件 name = 'wusir' # 自己去处理文件 很复杂?
下午
c://>mysqld install #mysqld.exe install #要安装mysql的server端
c://>net start mysql #开启mysql #相同的 net stop mysql 结束mysql #重启
#启动的是server端。。。(第一次默认之后一直开启的状态(减少重复))
c://> mysql -uroot -p # mysql -uroot #没有密码的情况下用root用户登录
#启动的是client端。。。
password: # 输入回车 #默认没密码
#测试一下配置文件生效了没有
mysql>select user();查看当前用户
mysql>show variables like '%charac%' # 输出 是utf-8什么的
exit #退出
; # 结束符
环境变量 也是变量。。。
就像是全局变量
只要mysql不是内部或外部命令,也不是可运行的程序
说明没有设置 不是全局的
数据库的安装和卸载
# 问题 # 1. D:\mysql\mysql-5.6.43-winx64安装目录中不能有空格和中文 # 2. my.ini文件是不是utf-8 # 3. 配置文件里的每一个路径的最后 是不是有看不见的空格 # 4. 文件的名 my.ini # 5. 安装包 # 卸载 # D:\mysql\mysql-5.6.43-winx64\mysqld remove 移出服务 # 把mysql整个文件都删掉\环境变量也删掉 # 重启电脑 # 最后的两招 # 1.换一个目录装 # 2.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 条件;