Python中所有程序都能用“数据”和“功能”结合的形式表达。对象是数据与功能的结合体。类是多个对象具有相似数据与功能的结合体
class 类名: 数据1 def 功能1(self): pass # 注意 1.在程序中要先定义类,才能产生该类的对象 2.类名的首字母最好用大写 3.缩进的代码块表示类的对象相同的数据与功能 4.类中的函数称为功能/方法 5.通过类名加括号的形式调用类产生该类的对象,即类的实例化 6.每次类的实例化都会产生一个新的对象
类的属性包含在类中定义的变量和函数,即类的数据和功能。
类中定义的变量或函数可以共享给该类产生的对象使用。 对象访问时,会先从自身名称空间查找元素,未找到则去类的名称空间查找。 # 访问方法 1.类名.__dict__['属性名'] 2.类名/对象名.数据名 类名/对象名.功能名()
1.类名.__dict__ # 返回类内部所有'共有'的元素 2.对象名.__dict__ # 返回对象内部所有'独有'的元素 3.对象调用类中定义的方法时会将对象本身(self)作为第一个位置参数传入
父类:多个类相同的数据和功能的结合体 继承:一个类可以继承多个父类从而获得多个父类的属性 class 类名(一个或多个父类名,逗号隔开): 独有属性 对象查找属性:对象自身 ---> 产生该对象的类 ---> 父类 # 若找不到则按照继承顺序依次往父类查找
异常分为语法错误和逻辑错误
1.语法错误 Python中红色下划线表示,应立即修改。 2.逻辑错误 运行时才会出现,又称Bug。 # 异常捕获 try: 被监测的代码段 except 错误类型 as 变量名: 出现对应类型异常时执行的分支代码 ''' Exception/BaseException可指任何一种错误类型 try、exception之间被检测的代码段尽可能少 异常在程序中只可少量使用(尽量减少可预知错误的出现) ''' 3.else/finally 异常捕获也可以与其他关键字连用 else 被检测的代码段未出现任何异常时会执行,与for/while使用场景类似 finally 被检测的代码段执行完毕后,无论出现异常与否都会执行finally后代码
# 演变历程 1.文件存储 五花八门的文本格式 2.类似"单机游戏" 数据保存在本地文件夹内,格式由设计者做出规定 3.类似"网络游戏" 数据保存在统一管理的服务器内(用户无需知道具体位置)
两种软件开发架构的本质是相同的。
1.c/s架构 c表示客户端,s表示服务端 该架构类似于某顾客(客户端)要去特定的店(服务端)里消费,两者存在明显的对应关系 2.b/s架构 b表示浏览器,s表示服务器/端 该架构类似于某个不清楚要去哪消费的顾客(浏览器),可能去任意一家店(服务器/端)消费
1.关系型数据库:具有固定的表结构,表与表直接通过外键建立联系。 例如MySQL、MariaDB、Oracle、PostgreSQL、SQL Server、sqlite等 2.非关系型数据库:不具有固定的表结构,采用键值对形式存储数据。 例如redis、mongoDB、memcache等
SQL语句是为了使其它程序能与数据库交互而发明的语言。
SQL语句是用来操作关系型数据库的语言。 NoSQL语句是用来操作非关系型数据库的语言。
MySQL数据库有多种版本,目前应用最广泛的是MySQL5.6,并逐步推进MySQL5.7的使用,5.5以前的版本几乎不使用,最新版是8.0。
1.移除 以管理员身份打开cmd窗口 关闭MySQL服务 net stop mysql 移除系统MySQL服务端 mysqld --remove 删除MySQL的环境变量 删除MySQL文件夹 2.下载 打开官网点击 DOWNLOADS 下拉页面点击 MySQL Community (GPL) Downloads 点击 MySQL Community Server 点击 Archives 选择往期版本 版本号 Product Version下拉框 选择5.6.44 点击 Download 3.添加至服务 ''' 查看系统服务 方法1:鼠标右键点击底部任务栏,选择任务管理器 方式2(推荐):windows+R 以管理员身份运行 services.msc ''' windows+R 以管理员身份打开cmd窗口 输入mysqld --install 第一次需要手动启动 方法1: 找到系统服务列表中MySQL点击启动 方法2: net start mysql 添加完成后MySQL服务端随着电脑的启动/关闭而启动/关闭
1.修改当前用户的密码 set password= password('密码') 2.不登录修改指定用户密码 mysqladmin -u用户名 -p原密码 password 新密码 # 如果忘记密码(本地),重置管理员密码的方法 1.停止当前MySQL服务 2.取消校验授权表启动MySQL服务 mysqld --skip-grant-tables 3.以管理员身份登录MySQL 4.修改指定用户密码 update mysql.user set password=password('密码') where user="root" and host="localhost" 5.停止当前MySQL服务并正常启动
\s 可以查看当前MySQL服务端的信息
1.初始配置文件最好不要修改 my-default.ini 2.想要修改配置需重新创建额外的配置文件并命名为my.ini 3.配置字符编码,一般为UTF-8 [mysqld] character-set-server=utf8 collation-server=utf8_general_ci [client] default-character-set=utf8 [mysql] default-character-set=utf8 4.配置更改完毕需重启MySQL服务
# 查找 1.查看所有数据库名称 show databases; 2.查看指定的数据库 show create database test01; # 增加 创建数据库test01 create database test01; # 修改 1.修改指定数据库编码 alter database test01 charset='gbk'; # 删除 drop database test01;
'''对表操作需先知道当前库''' 1.查看当前表在哪个库下 select database(); 2.切换当前数据库 use 库名; # 查找 1.查看某个库下所有的表名 show tables; 2.查看指定的表的信息 show create table 表名; 3.查看表结构 describe 表名;简写: desc 表名; # 增加 create table 表名( 字段1 类型1, 字段2 类型2 ); # 修改 alter table student01 modify id varchar(16) # 删除 drop table 表名;
# 增加 1.插入记录(给表中每个字段都赋值) insert into 表名 values(记录1的字段1,记录1的字段2); 2.一次插入多条记录 insert into 表名 values(记录1的字段1,记录1的字段2),(记录2的字段1,记录2的字段2); # 查找 1.查看表中所有数据 select * from 表名; 2.查看指定字段对应的数据 select 字段名 from 表名; # 修改 1.修改符合条件的记录 update 表名 set 字段名=值 where 条件字段=条件值; # 删除 1.删除符合条件的记录 delete from 表名 where 条件字段=条件值; 2.删除表中所有数据(慎用) delete from 表名;
存储引擎是数据库内部存储数据的方式,有很多种。
查看存储引擎:show engines; '''主要的存储引擎''' 1.InnoDB # MySQL5.5以后的版本默认的存储引擎 支出事务、外键、行锁等功能 故数据安全性高 2.MyISAM # MySQL5.5以前的版本默认的存储引擎 不支持事务、外键等功能 故安全性较低,不过存取速度快于InnoDB 3.MEMORY 数据直接存储在内存中 故存取速度很快,不过数据在断电立即丢失 4.BLACKHOLE 写入其中的数据都会丢失 '''比较不同存储引擎的特点''' 1.用不同的存储引擎创建四张可供测试的表 create table test_engine_1(id int)engine=InnoDB; create table test_engine_2(id int)engine=MyISAM; create table test_engine_3(id int)engine=MEMORY; create table test_engine_4(id int)engine=BLACKHOLE; 2.生成的文件数量也不相同 (1) InnoDB >>> 2 .frm # 表结构 .idb # 表数据、表索引用同一个文件存储 (2) MyISAM >>> 3 .frm # 表结构 .MYD # 表数据 单独一个文件 .MYI # 表索引 单独一个文件 (3) MEMORY >>> 1 .frm # 数据存放于内存,故只有表结构 (4) BLACKHOLE >>>1 .frm # 不存储数据,故只有表结构 3.查看存储数据特性,这里先各自插入一条记录 insert into test_engine_1 values(1); insert into test_engine_2 values(2); insert into test_engine_3 values(3); insert into test_engine_4 values(4); select * from test_engine_3; # 关闭服务后查询结果空,数据丢失 select * from test_engine_4; # 查询结果空,数据丢失
# 格式 create table 表名( 字段名1 字段类型(宽度) 约束条件, 字段名2 字段类型(宽度) 约束条件, 字段名3 字段类型(宽度) 约束条件 );
整数类型 范围(若有符号则减少一个二进制位即可) tinyint 0 ~ 255 smallint -2^15 ~ 2^15-1 int -2^31 ~ 2^31-1 bigint -2^63 ~ 2^63-1 # 整数类型默认自带符号,可用unsigned约束条件取消 create table test_int(id tinyint); insert into test_int values(-100),(252);
不同类型的浮点型存储小数的大小范围及精度都不同 float # 总共255位 小数占30位 double # 总共255位 小数占30位 decimal # 总共65位 小数占30位 精度比较:float < double < decimal
字符型分为char和varchar。
char(n) 最多可以存储n个字符,超出就报错,未超出也按照四个字符存储 varchar(n) 最多可以存储n个字符,超出就报错,未超出按实际字符数存储
由于5.6有优化机制,超出范围不会报错,故这里需要开启严格模式,5.7及之后版本默认开启严格模式。
查看严格模式:show variables like '%mode%'; 设置严格模式: set global sql_mode='strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH'; # 之后退出客户端重新进入即可 char_length():获取括号内字符串长度
常用时间类型 date # 年月日 time # 时分秒 datetime # 年月日时分秒 Year # 年
enum 枚举:多选一 set 集合:多选多 枚举类型只能插入提前定义好的一个值,否则报错 集合类型只能插入提前定义好的一个或多个值,否则报错
''' 宽度不限制数字类型的存储长度,只用来表示其展示长度。 故定义数字时无需手动添加宽度。 ''' 1.按照字段顺序依次传入(类似于位置参数,一个都不能少) insert into t1 values() 2.按照指定的字段传入(类似于关键字参数,可以少) insert into t1(id,name) values() # 约束条件 无符号 : unsigned 0填充 : zerofill 不能为空: not null # 使用频率高 默认值 : default 唯一 : unique 多列唯一: unique(字段1,字段2) # 限制字段1和2的组合唯一