python3之sqlite3创建数据库与基础用法详解

# (重点)sqlite示例   创建表,写数据
# 现将sqlite3库导入进来
import sqlite3

# 第一步,链接数据,括号里放的是要连接的数据库的名称
# 如果该数据库名称不存在则自动创建数据库
# 接收对象=链接数据语句("要连接的数据库名称")
connect = sqlite3.connect("testsqlite.db")

# 第二步,获取数据库游标,并用变量接收
# 注意不获取游标是无法操作数据库的,游标就像鼠标是指向
cursor = connect.cursor()

# 第三步,写一个要执行的sql语句,如下:
# sql = "CREATE TABLE 自定义表名(字段(第一列的名称) 数据类型 约束条件)"
# 如果只需要一个字段这样写一个就行了,如果多个字段用逗号分隔就行 下面是两个字段的写法
sql = "CREATE TABLE student(id INT PRIMARY KEY, name VARCHAR(10) not null)"

# 第四步,执行sql语句,用游标的execute()方法,把写好的sql语句放进去执行:
cursor.execute(sql)

# 执行完以后:数据库,数据表创建完成,然后
# 第五步,关闭游标
cursor.close()

# 第六步,提交事务
connect.commit()

# 第七步,关闭数据库
connect.close()

# 数据库语法详解
# SQL
# structured query language 结构化查询语言。专门对数据库进行查找、增加、修改、删除、统计的操作语言。
# CURD 增删查改 create update retrieve delete。
# 书写风格,关键字大小写都行,建议大写。表名大小写都行,但是在一些数据库中不区分大小写,建议小写。

# (重要)基本语法。
# 1. 查找
# 例句:"SELECT * FROM student;" 查询所有
# SELECT 字段1,字段2,字段3,...  FROM 表名;      python中返回值形如[(1, 502班, 小明, 男), (), ()]。
# 字段比较多时简写为  SELECT * FROM 表名;       由于数据库执行时会把*转换为字段再执行,性能极微小下降。
# SELECT * FROM 表名 WHERE 字段1 = 过滤值,字典2=过滤值 ;       where限定条件查找。
# 2. 添加
# 例句:"INSERT INTO student (id name) VALUES (1,"小红");"
# INSERT INTO 表名 字段1,字段2,...   VALUES (1, "小明", "男");
# 简写 INSERT INTO 表名 VALUES (1, "小明", "男");
# 3. 修改
# 例句:"UPDATE 表名 SET name="wode" WHERE id=1;"
# UPDATE 表名 SET 字段1=新值,字段2=新值 WHERE 字段1 = 过滤值;
# 注意没有where条件限定行的话将会更新整张表。
# 4. 删除
# 例句:"DELETE FROM student;"
# DELETE FROM 表名;                 注意会删除整张表。
# DELETE FROM 表名 WHERE 字段1 = 过滤值;       限定条件删除某些行。
# 5. 创建表
# CREATE TABLE 表名 {
#     字段类型 字段名 其它关键字(主键 备注),
#     INT   id   PRIMARY KEY,
#     VARCHAR(20) username ,
# }

# 数据库字段类型
# 数据库创建表示要事先告诉计算机硬盘,每张表的每个字段存什么类型、将要存储的内容大还是小。长度过小,内容值存不进去,长度太大,浪费硬盘空间。我们需要选择合适的类型和长度。
# 各数据库字段类型关键字基本一致。mysql oracle postgresql常用字段类型如下:
# 1. 整数
# 整数:常用INT   INTEGER   占4个字节,2**32,可以表示常用范围整数。
# (不常用)TINYINT(1字节)  SMALLINT(2字节) MEDIUMINT(3字节)
# BIGINT(8字节) 适用身份证号、VIP号码比较长的编号。
# 2. 浮点数
# 常用 FLOAT(4字节) 单精度小数 。 即使是单精度,范围也不小。
# DOUBLE(8字节) 双精度小数。
# 场景 金钱计算,轨道计算。
# 3. 字符串
# CHAR  char(10) 可以存储长度(字节长度)不超过10的字符串。例如"hello"。但由于长度按照字节判断,存unicode编码的中文只能存3个。
# 常用  VARCHAR 0-65535字节,variable char 可变字符串。VARCHAR(5)  可以存储5个中文或5个英文字母。场景 用户名、家庭住址。
# TEXT TINYTEXT  medium  longtext , 场景 大文本存储,书籍文章、用户反馈。
# BLOB medium  longblob ,二进制文件, 场景 图片、视频。但一般不在数据库中存储图片和视频
# 因为会增加数据库的计算压力和带宽传输压力和备份还原的难度和用户信息静态资源耦合到一起,解决方案是 图片视频存到普通文件目录下,数据库中存储文件路径。
# 4. 日期
# 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        什么都不存

"""
(了解)数据库驱动:数据库有自己本身的软件构造和操作语言,数据库暴露出操作接口,方便跟其它各种编程语言对接。编程语言到数据库的对接中介 叫驱动。所以我们用python操作数据库要使用驱动。

步骤:
1. 引入驱动包
2. 连接数据库,得到会话。   中大型数据库需要先用户名、密码验证,再创建数据库,再连接数据库;而轻量级的sqlite省略了前面的过程直接连接,如果这个数据库不存在的话,会新生成一个库,数据保存在一个单db文件中。
(了解)sqlite3.connect(':memory:') 数据库会创建在内存中,脚本正常运行,只不过看不到具体数据库,主要用途测试。
3. 生成游标。  游标:游标是对数据库某一行某一格进行增删改查的操作者,就好像操作excel表格时的鼠标。
4. 插入一些数据。  注意主键id列不能重复。
5. 关闭游标。   这一步可以省略。
6. 提交 commit。   除了查询,增加、修改、删除操作都需要在执行sql提交,否则不生效,好像平时用软件保存时的确认对话框。
7. 断开会话连接,释放资源。
"""

"""
可能的异常:
1. 唯一约束错误,主键重复。 sqlite3.IntegrityError: UNIQUE constraint failed: student.id
2. 表已存在重复创建。sqlite3.OperationalError: table student already exists
3. 无法操作已关闭的数据库。sqlite3.ProgrammingError: Cannot operate on a closed database.
"""

猜你喜欢

转载自blog.csdn.net/keer1303242749/article/details/84169991