数据库介绍
引题
为什么使用数据库:
之前的学习中我们已经可以存储数据,变量、读写本地文件(txt、csv)。
- 持久化。内存中的变量当程序重启和电脑断电时丢失数据,而硬盘可以长时间、持久地存储数据。数据存储到硬盘上的过程叫持久化。
- 数据库更加专业强大。远比纯文本文档、excel表格强大,增删改查和统计函数。
数据库基本概念
观察表格、excel表格 ,打开了 学生列表.xls excel表格文档。类比引入数据库概念。
- 库 schema:好像整个表格文档。 好像一个物流公司共占地100亩,盖了50个仓库,A01仓库负责存储河南客户货物,A02仓库负责存储广州xx项目物料。每一个仓库对应一个项目。
- 表 table:对应excel表格里sheet1 sheet2。由行内容和列组成。表描述一个类,每一行描述一个对象。
- 字段 field:对应表格头部的 序号、班级、姓名。好像类的属性。字段里存储的值的类型需要事先定义。
- 值 value:表格每一行具体存储的信息。
- 主键 primary key:类似表格中 序号 这一列。数据库中这一列会自增并不会重复。
- 外键 foreign key: 表1学员信息里一个班级字段引用自另一个表班级信息表的id列。优点易于维护,保持数据一致性。
- 范式:描述 智游学校时,可以把全部信息字段定义到一张表上,也可以分为学员信息表、班级信息表、课程信息表。划分维度、信息耦合度可高可低,具体结合业务逻辑分析。
常见数据库介绍
关系型数据库:
- sqlite:轻量级数据库。功能基础简单,在数据较少情况下性能并不比重型数据库低。优点,python解释器内置驱动,无需安装直接使用,适合初学数据库。手机应用使用的就是它。
- mysql:最流行的数据库。中型。开源、php流行推动了mysql的流行。
- PostgreSQL: 大象数据库,号称最先进的数据库。从大学兴起的开源数据库、架构优秀、功能前卫,数据量很大的时候,性能衰减不明显。消耗相同硬件资源的情况下性能和稳定性优于mysql数据库。django odoo等python框架官方推荐使用此数据库。但是目前市场占有率还不高。
- oracle:地位很高的商用数据库。昂贵、稳定、功能强大,常与java配合使用。
- DB2 sybase MSSQL等,其它的商用数据库。
- access:微软office套件中包含,轻量,由于数据库门槛,使用者不多。
no-sql(not only sql)型数据库:
7. mongodb 存储单位是文档,json(类似后端dict)结构整个存进去。数据常放在内存中以获得查询性能,定期把数据持久化到硬盘上。
8. redis 键值对 “name”=“小明” 。
数据库字段类型
数据库创建表示要事先告诉计算机硬盘,每张表的每个字段存什么类型、将要存储的内容大还是小。长度过小,内容值存不进去,长度太大,浪费硬盘空间。我们需要选择合适的类型和长度。
各数据库字段类型关键字基本一致。mysql oracle postgresql常用字段类型如下:
- 整数
整数:常用INT INTEGER 占4个字节,2**32,可以表示常用范围整数。
(不常用)TINYINT(1字节) SMALLINT(2字节) MEDIUMINT(3字节)
BIGINT(8字节) 适用身份证号、VIP号码比较长的编号。 - 浮点数
常用 FLOAT(4字节) 单精度小数 。 即使是单精度,范围也不小。
DOUBLE(8字节) 双精度小数。
场景 金钱计算,轨道计算。 - 字符串
CHAR char(10) 可以存储长度(字节长度)不超过10的字符串。例如"hello"。但由于长度按照字节判断,存unicode编码的中文只能存3个。
常用 VARCHAR 0-65535字节,variable char 可变字符串。VARCHAR(5) 可以存储5个中文或5个英文字母。场景 用户名、家庭住址。
TEXT TINYTEXT medium longtext , 场景 大文本存储,书籍文章、用户反馈。
BLOB medium longblob ,二进制文件, 场景 图片、视频。但一般不在数据库中存储图片和视频,因为会增加数据库的计算压力和带宽传输压力和备份还原的难度和用户信息静态资源耦合到一起,解决方案是 图片视频存到普通文件目录下,数据库中存储文件路径。 - 日期
DATE 日期, 形如"2018-11-08"
常用 DATETIME 日期时间, “2018-11-08 16:52:30” “2018-11-08 16:52:30.123” “2018-11-08 16:52:30 GTM+8”
常用 TIMESTAMP 时间戳, 1541667270 1541667270.7252207 1541667270725
sqlite的字段比较简化:
INTEGER 整数
REAL 浮点数
TEXT 字符串
NULL 什么都不存
SQL
structured query language 结构化查询语言。专门对数据库进行查找、增加、修改、删除、统计的操作语言。
CURD 增删查改 create update retrieve delete。
书写风格,关键字大小写都行,建议大写。表名大小写都行,但是在一些数据库中不区分大小写,建议小写。
(重要)基本语法。
- 查找
SELECT 字段1,字段2,字段3,… FROM 表名; python中返回值形如[(1, 502班, 小明, 男), (), ()]。
字段比较多时简写为 SELECT * FROM 表名; 由于数据库执行时会把*转换为字段再执行,性能极微小下降。
SELECT * FROM 表名 WHERE 字段1 = 过滤值,字典2=过滤值 ; where限定条件查找。 - 添加
INSERT 字段1,字段2,… INTO 表名 VALUES (1, “小明”, “男”);
简写 INSERT INTO 表名 VALUES (1, “小明”, “男”); - 修改
UPDATE 表名 SET 字段1=新值,字段2=新值 WHERE 字段1 = 过滤值;
注意没有where条件限定行的话将会更新整张表。 - 删除
DELETE FROM 表名; 注意会删除整张表。
DELETE FROM 表名 WHERE 字段1 = 过滤值; 限定条件删除某些行。 - 创建表
CREATE TABLE 表名 {
字段类型 字段名 其它关键字(主键 备注),
INT id PRIMARY KEY,
VARCHAR(20) username ,
}
数据库介绍
引题
为什么使用数据库:
之前的学习中我们已经可以存储数据,变量、读写本地文件(txt、csv)。
- 持久化。内存中的变量当程序重启和电脑断电时丢失数据,而硬盘可以长时间、持久地存储数据。数据存储到硬盘上的过程叫持久化。
- 数据库更加专业强大。远比纯文本文档、excel表格强大,增删改查和统计函数。
数据库基本概念
观察表格、excel表格 ,打开了 学生列表.xls excel表格文档。类比引入数据库概念。
- 库 schema:好像整个表格文档。 好像一个物流公司共占地100亩,盖了50个仓库,A01仓库负责存储河南客户货物,A02仓库负责存储广州xx项目物料。每一个仓库对应一个项目。
- 表 table:对应excel表格里sheet1 sheet2。由行内容和列组成。表描述一个类,每一行描述一个对象。
- 字段 field:对应表格头部的 序号、班级、姓名。好像类的属性。字段里存储的值的类型需要事先定义。
- 值 value:表格每一行具体存储的信息。
- 主键 primary key:类似表格中 序号 这一列。数据库中这一列会自增并不会重复。
- 外键 foreign key: 表1学员信息里一个班级字段引用自另一个表班级信息表的id列。优点易于维护,保持数据一致性。
- 范式:描述 智游学校时,可以把全部信息字段定义到一张表上,也可以分为学员信息表、班级信息表、课程信息表。划分维度、信息耦合度可高可低,具体结合业务逻辑分析。
常见数据库介绍
关系型数据库:
- sqlite:轻量级数据库。功能基础简单,在数据较少情况下性能并不比重型数据库低。优点,python解释器内置驱动,无需安装直接使用,适合初学数据库。手机应用使用的就是它。
- mysql:最流行的数据库。中型。开源、php流行推动了mysql的流行。
- PostgreSQL: 大象数据库,号称最先进的数据库。从大学兴起的开源数据库、架构优秀、功能前卫,数据量很大的时候,性能衰减不明显。消耗相同硬件资源的情况下性能和稳定性优于mysql数据库。django odoo等python框架官方推荐使用此数据库。但是目前市场占有率还不高。
- oracle:地位很高的商用数据库。昂贵、稳定、功能强大,常与java配合使用。
- DB2 sybase MSSQL等,其它的商用数据库。
- access:微软office套件中包含,轻量,由于数据库门槛,使用者不多。
no-sql(not only sql)型数据库:
7. mongodb 存储单位是文档,json(类似后端dict)结构整个存进去。数据常放在内存中以获得查询性能,定期把数据持久化到硬盘上。
8. redis 键值对 “name”=“小明” 。
数据库字段类型
数据库创建表示要事先告诉计算机硬盘,每张表的每个字段存什么类型、将要存储的内容大还是小。长度过小,内容值存不进去,长度太大,浪费硬盘空间。我们需要选择合适的类型和长度。
各数据库字段类型关键字基本一致。mysql oracle postgresql常用字段类型如下:
- 整数
整数:常用INT INTEGER 占4个字节,2**32,可以表示常用范围整数。
(不常用)TINYINT(1字节) SMALLINT(2字节) MEDIUMINT(3字节)
BIGINT(8字节) 适用身份证号、VIP号码比较长的编号。 - 浮点数
常用 FLOAT(4字节) 单精度小数 。 即使是单精度,范围也不小。
DOUBLE(8字节) 双精度小数。
场景 金钱计算,轨道计算。 - 字符串
CHAR char(10) 可以存储长度(字节长度)不超过10的字符串。例如"hello"。但由于长度按照字节判断,存unicode编码的中文只能存3个。
常用 VARCHAR 0-65535字节,variable char 可变字符串。VARCHAR(5) 可以存储5个中文或5个英文字母。场景 用户名、家庭住址。
TEXT TINYTEXT medium longtext , 场景 大文本存储,书籍文章、用户反馈。
BLOB medium longblob ,二进制文件, 场景 图片、视频。但一般不在数据库中存储图片和视频,因为会增加数据库的计算压力和带宽传输压力和备份还原的难度和用户信息静态资源耦合到一起,解决方案是 图片视频存到普通文件目录下,数据库中存储文件路径。 - 日期
DATE 日期, 形如"2018-11-08"
常用 DATETIME 日期时间, “2018-11-08 16:52:30” “2018-11-08 16:52:30.123” “2018-11-08 16:52:30 GTM+8”
常用 TIMESTAMP 时间戳, 1541667270 1541667270.7252207 1541667270725
sqlite的字段比较简化:
INTEGER 整数
REAL 浮点数
TEXT 字符串
NULL 什么都不存
SQL
structured query language 结构化查询语言。专门对数据库进行查找、增加、修改、删除、统计的操作语言。
CURD 增删查改 create update retrieve delete。
书写风格,关键字大小写都行,建议大写。表名大小写都行,但是在一些数据库中不区分大小写,建议小写。
(重要)基本语法。
- 查找
SELECT 字段1,字段2,字段3,… FROM 表名; python中返回值形如[(1, 502班, 小明, 男), (), ()]。
字段比较多时简写为 SELECT * FROM 表名; 由于数据库执行时会把*转换为字段再执行,性能极微小下降。
SELECT * FROM 表名 WHERE 字段1 = 过滤值,字典2=过滤值 ; where限定条件查找。 - 添加
INSERT 字段1,字段2,… INTO 表名 VALUES (1, “小明”, “男”);
简写 INSERT INTO 表名 VALUES (1, “小明”, “男”); - 修改
UPDATE 表名 SET 字段1=新值,字段2=新值 WHERE 字段1 = 过滤值;
注意没有where条件限定行的话将会更新整张表。 - 删除
DELETE FROM 表名; 注意会删除整张表。
DELETE FROM 表名 WHERE 字段1 = 过滤值; 限定条件删除某些行。 - 创建表
CREATE TABLE 表名 {
字段类型 字段名 其它关键字(主键 备注),
INT id PRIMARY KEY,
VARCHAR(20) username ,
}
数据库介绍
引题
为什么使用数据库:
之前的学习中我们已经可以存储数据,变量、读写本地文件(txt、csv)。
- 持久化。内存中的变量当程序重启和电脑断电时丢失数据,而硬盘可以长时间、持久地存储数据。数据存储到硬盘上的过程叫持久化。
- 数据库更加专业强大。远比纯文本文档、excel表格强大,增删改查和统计函数。
数据库基本概念
观察表格、excel表格 ,打开了 学生列表.xls excel表格文档。类比引入数据库概念。
- 库 schema:好像整个表格文档。 好像一个物流公司共占地100亩,盖了50个仓库,A01仓库负责存储河南客户货物,A02仓库负责存储广州xx项目物料。每一个仓库对应一个项目。
- 表 table:对应excel表格里sheet1 sheet2。由行内容和列组成。表描述一个类,每一行描述一个对象。
- 字段 field:对应表格头部的 序号、班级、姓名。好像类的属性。字段里存储的值的类型需要事先定义。
- 值 value:表格每一行具体存储的信息。
- 主键 primary key:类似表格中 序号 这一列。数据库中这一列会自增并不会重复。
- 外键 foreign key: 表1学员信息里一个班级字段引用自另一个表班级信息表的id列。优点易于维护,保持数据一致性。
- 范式:描述 智游学校时,可以把全部信息字段定义到一张表上,也可以分为学员信息表、班级信息表、课程信息表。划分维度、信息耦合度可高可低,具体结合业务逻辑分析。
常见数据库介绍
关系型数据库:
- sqlite:轻量级数据库。功能基础简单,在数据较少情况下性能并不比重型数据库低。优点,python解释器内置驱动,无需安装直接使用,适合初学数据库。手机应用使用的就是它。
- mysql:最流行的数据库。中型。开源、php流行推动了mysql的流行。
- PostgreSQL: 大象数据库,号称最先进的数据库。从大学兴起的开源数据库、架构优秀、功能前卫,数据量很大的时候,性能衰减不明显。消耗相同硬件资源的情况下性能和稳定性优于mysql数据库。django odoo等python框架官方推荐使用此数据库。但是目前市场占有率还不高。
- oracle:地位很高的商用数据库。昂贵、稳定、功能强大,常与java配合使用。
- DB2 sybase MSSQL等,其它的商用数据库。
- access:微软office套件中包含,轻量,由于数据库门槛,使用者不多。
no-sql(not only sql)型数据库:
7. mongodb 存储单位是文档,json(类似后端dict)结构整个存进去。数据常放在内存中以获得查询性能,定期把数据持久化到硬盘上。
8. redis 键值对 “name”=“小明” 。
数据库字段类型
数据库创建表示要事先告诉计算机硬盘,每张表的每个字段存什么类型、将要存储的内容大还是小。长度过小,内容值存不进去,长度太大,浪费硬盘空间。我们需要选择合适的类型和长度。
各数据库字段类型关键字基本一致。mysql oracle postgresql常用字段类型如下:
- 整数
整数:常用INT INTEGER 占4个字节,2**32,可以表示常用范围整数。
(不常用)TINYINT(1字节) SMALLINT(2字节) MEDIUMINT(3字节)
BIGINT(8字节) 适用身份证号、VIP号码比较长的编号。 - 浮点数
常用 FLOAT(4字节) 单精度小数 。 即使是单精度,范围也不小。
DOUBLE(8字节) 双精度小数。
场景 金钱计算,轨道计算。 - 字符串
CHAR char(10) 可以存储长度(字节长度)不超过10的字符串。例如"hello"。但由于长度按照字节判断,存unicode编码的中文只能存3个。
常用 VARCHAR 0-65535字节,variable char 可变字符串。VARCHAR(5) 可以存储5个中文或5个英文字母。场景 用户名、家庭住址。
TEXT TINYTEXT medium longtext , 场景 大文本存储,书籍文章、用户反馈。
BLOB medium longblob ,二进制文件, 场景 图片、视频。但一般不在数据库中存储图片和视频,因为会增加数据库的计算压力和带宽传输压力和备份还原的难度和用户信息静态资源耦合到一起,解决方案是 图片视频存到普通文件目录下,数据库中存储文件路径。 - 日期
DATE 日期, 形如"2018-11-08"
常用 DATETIME 日期时间, “2018-11-08 16:52:30” “2018-11-08 16:52:30.123” “2018-11-08 16:52:30 GTM+8”
常用 TIMESTAMP 时间戳, 1541667270 1541667270.7252207 1541667270725
sqlite的字段比较简化:
INTEGER 整数
REAL 浮点数
TEXT 字符串
NULL 什么都不存
SQL
structured query language 结构化查询语言。专门对数据库进行查找、增加、修改、删除、统计的操作语言。
CURD 增删查改 create update retrieve delete。
书写风格,关键字大小写都行,建议大写。表名大小写都行,但是在一些数据库中不区分大小写,建议小写。
(重要)基本语法。
- 查找
SELECT 字段1,字段2,字段3,… FROM 表名; python中返回值形如[(1, 502班, 小明, 男), (), ()]。
字段比较多时简写为 SELECT * FROM 表名; 由于数据库执行时会把*转换为字段再执行,性能极微小下降。
SELECT * FROM 表名 WHERE 字段1 = 过滤值,字典2=过滤值 ; where限定条件查找。 - 添加
INSERT 字段1,字段2,… INTO 表名 VALUES (1, “小明”, “男”);
简写 INSERT INTO 表名 VALUES (1, “小明”, “男”); - 修改
UPDATE 表名 SET 字段1=新值,字段2=新值 WHERE 字段1 = 过滤值;
注意没有where条件限定行的话将会更新整张表。 - 删除
DELETE FROM 表名; 注意会删除整张表。
DELETE FROM 表名 WHERE 字段1 = 过滤值; 限定条件删除某些行。 - 创建表
CREATE TABLE 表名 {
字段类型 字段名 其它关键字(主键 备注),
INT id PRIMARY KEY,
VARCHAR(20) username ,
}
import sqlite3
connect = sqlite3.connect(“testsqlite.db”)
cursor = connect.cursor()
cursor.execute("""
SELECT id,name from student;
“”")
student_list = cursor.fetchall()
print(student_list)
cursor.execute("""
SELECT * FROM student WHERE name=“小明”;
“”")
student = cursor.fetchone()
print(student)
cursor.execute("""
SELECT * FROM student WHERE id=0;
“”")
student2 = cursor.fetchone()
print(student2)
cursor.execute("""
SELECT * FROM student WHERE id>0;
“”")
student_list3 = cursor.fetchall()
student3 = cursor.fetchone()
print(student_list3)
print(f’学生姓名是 {student3[1]}’)
print(‘学生姓名是{} 性别{} 住址{} 电话{}’.format(student3[‘name’], student3[2], ))
cursor.execute("""
UPDATE student SET name=“大红” WHERE id=3;
“”")
connect.commit()
cursor.execute(""" select * from student; “”")
print(cursor.fetchall())
cursor.close()
connect.close()
“”"
cursor.fetchall() 取回结果集,形如[(1, ‘小王’), (2, ‘小明’)] 大列表,列表每一项是元组、是一行,元组里的每一项对应每一列的值。结果空返回[]。
cursor.fetchone() 取回一条数据,形如 (2, ‘小明’) 。结果空返回None类型。如果select符合多条,返回多条结果里的第一条。
cursor.fetchxxx() 方法为了节省内存和速度采用了生成器结构,只能取一次。
“”"
“”"
sql基础语法补充:
- 主键:一张表一般都有一列主键,主键primary key一般名叫 id,字段类型一般为自增整数。当insert行内容时,sql语句可以不插入id列,数据库会帮你自动插入并自增auto increase。
主键不能重复。主键好处是确保数据一致性、方便查询。如果一列为主键,那么必然非空not null和唯一unique。
2.如果工作中一个数据库连接实例下有多个库,那么表名要带上命名空间,例如main.student。
3.丢弃表 drop。跟delete关键字相比更为严重,delete删除某行或清空表内容 表结构还在。而drop是完全删除丢弃整个表,内容和结构都删除。 drop table [表名]。
4.字段被双引号括住 ,形如SELECT “id”, “name” FROM student; ,结果一样。好处是避免数据库关键字导致的错误。当数据库解释器遇到引号时,会认为引号里的名字就是用户自定义的字段名而不是内置关键字。平时省事可以不加引号。
数据库概念补充:
数据库的大概原理:数据按树形结构存储,查找数据时只需比对几次就能查出来。数据量增大时,查询时间成对数慢速增长。
索引:index,目录。索引会占据一定存储空间,在数据库中以树型数据结构存储,建立的是目录到硬盘存储的数据的映射。就好像平时看的书籍。创建主键的那一列会自动创建索引。一般在查询经常比较的字段上创建索引(如id列、phone列)。优点大幅提高select查询效率。缺点是占据更多的硬盘空间。
事务:transaction。 当有多句sql语句的时候,例如sql1 插入银行交易表一行数据金额100元、sql2 修改刚才插入的一行数据的金额为98元,但执行sql1的时候由于用户拥堵等原因执行失败,这时再执行sql2必然错误或误修改其它的正常数据。为了避免这种情况,把这两句sql都放入一个事务执行,只要一个事务中任意一条sql执行失败,那么其它已执行的sql会回到修改前状态(回滚rolling),只有当所有sql都执行成功,才会一起commit生效。简单来说,事务要么都执行,要么出错都不行。优点 保证数据一致性。
“”"
学生管理V4 sqlite版
import sqlite3
def create_table():
connect = sqlite3.connect(“testsqlite.db”)
cursor = connect. cursor()
cursor.execute("""
CRDEATE TABLE students
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
sex TEXT,
age INTEGER,
phone TXET
)
“”")
connect.commit()
cursor.close()
connect.close()
def show_students():
print(‘行号\t\t姓名\t\t年龄\t\t性别\t\t电话\t\t’)
print("-----------------------------------------------------")
connect = sqlite3.connect(“testsqlite.db”)
cursor = connect.cursor()
cursor.execute("""
SELECT * FROM students;
“”")
student_list =cursor.fetchall()
for index,student in enumerate(student_list):
print(f’{index+1}\t\t{studeng[1]}\t\t{student[2]}\t\t{student[3]}\t\t{student[4]}’)
cursorr.close()
connect.clos()
def add_student():
name =input(’新学生姓名:’)
sex = input('新学生性别:’)
age = input('新学生年龄:‘)
phone = input('新学生电话:’)
connect = sqlite3.connect("testsqlite.db")
cursor = connect.cursor()
sql = f"""
INSERT INTO students(name,sex,age,phone) VALUES("{name}”,“{sex}",{age},"{phone}");
"""
cursorr.execute(sql)
connect.commit()
connect.close()
print('新学生添加成功‘)
def update_student():
# 数据库设计 应该多一列 学生编号。id列面向数据库为了安全不适合向用户展示。行号每一次不固定。
stu_name = input(‘要修改哪个学生?学生姓名:’)
new_phone = input(‘修改后的学生电话:’)
connect = sqlite3.connect("testsqlite.db")
cursor = connect.cursor()
# 先查询输入的学生是否存在,存在的话更新,不存在的给出用户提示
sql = f"""
SELECT 1 FROM students WHERE name="{stu_name}";
"""
cursor.execute(sql)
student = cursor.fetchall()
if student:
sql2 = f"""
UPDATE students SET phone="{new_phone}" WHERE name="{stu_name}";
"""
# print(sql2)
cursor.execute(sql2)
connect.commit()
else:
print('学生姓名不存在,请重新操作。')
connect.close()
print('学生修改成功')
def delete_student():
sub_select = input("""
删除>请选择删除子操作
1.按学生姓名删除
2.全部删除
“”")
if sub_select == ‘1’:
stu_name = input(‘要删除的学生姓名:’)
“”" delete from students where name=’{stu_name}’ “”"
elif sub_select == ‘2’:
“”" delete from students;"""
confirm = input(‘要删除全部学生?(Y/N):’)
if confirm == ‘Y’:
# cursor.execute()
pass
def main():
# 主函数,程序入口
while True:
print("""
欢迎使用学生管理系统
1-查看学员姓名
2-添加学员姓名
3-修改学员姓名
4-删除学员姓名
0-退出程序
“”")
num = int(input('请输入操作编号:'))
if num == 1:
show_students()
elif num == 2:
add_student()
elif num == 3:
update_student()
elif num == 4:
delete_student()
elif num == 0:
break
if name == ‘main’:
# create_table()
main()
可能出现的错误:
插入功能
sql = “”"
INSERT INTO students (name, sex, age, phone) VALUES (%s, %s, %d, %s);
“”" % (name, sex, int(age), phone)
print(sql)
报错 sqlite3.OperationalError: no such column: aaa
原因 sql INSERT INTO students (name, sex, age, phone) VALUES (aaa, nan, 13, 13000); 值并不是sql解释器理解的字符串。
解决 %s两侧加引号。 INSERT INTO students (name, sex, age, phone) VALUES ("%s", %s, %d, %s) % (name, sex, int(age), phone);
sql补充
SELECT 1 FROM students WHERE name="{stu_name}"; – 只关心一行数据是否存在。效率比select * 高。
##debug
pdb包示例
import pdb # python debug包
def test(arg):
pdb.set_trace() # 设置跟踪
for i in range(arg):
print(i)
return arg
pdb.run(“test(3)”)
“”"
断点:debug运行到某一句代码时暂时停住。一句一句向下执行太慢,我们只需要在可能出现问题的代码前设置断点。
- 打断点。运行程序
- (Pdb)模式下 输入 “c" 回车,程序会执行到第一个断点处。 信息提示,运行到第几行,在哪个函数哪个文件下。
- (Pdb)模式下 输入 “s" 回车,向下执行一句代码
- (Pdb)模式下 输入 “a" 回车,查看相关变量的值。
debug好处:代码一句一句执行,不断查看变量的值,为编程提供信息支持。
pdb缺点:打断点不方便,命令行调试不方便。
“”"
“”"
为了使debug更加方便,pycharm提供了图形化工具。
- 编辑器左侧行号区域,单击设置断点
- 以debug模式运行。
“”"
def test2(arg):
for i in range(arg):
print(i)
return arg
test2(10)
def test3():
test2(10)
print(‘world’)
print(‘world’)
print(‘world’)
test3()
“”"
可能出现的错误:
- no module pytest 。 CPython错误。
pip install pytest
或重装python解释器 - win32 错误
pip install pywin32
最好安装主流操作系统 win7x64 win10x64
“”"