Python中的数据库
这段代码展示了如何使用 Python 的sqlite3模块来创建数据库、创建表、插入数据、查询数据并关闭连接。下面单独将数据库中的增删改查进行讲解增删改查增(插入数据):使用向数据库中添加新记录。# 连接数据库# 游标# 插入数据)',('小牛',18,'A')))',('小羊',19,'B')))',('小狗',20,'C'))#关闭连接插入代码使用execute方法执行了一条 SQL 插入命令
本篇主要讲解的数据库的基础

安装:
安装MySQL8.0:https://dev.mysql.com/downloads/windows/installer/8.0.html
安装SQLite的Python库:在 Python 中,SQLite 的 Python 库是 sqlite3,它是 Python 标准库的一部分,因此不需要额外安装。这意味着当你安装 Python 时,sqlite3 通常已经包含在内。

SQLite的优缺点:
优点
简单易用:SQLite 的安装和部署非常简单,只需将 SQLite 库文件引用到应用程序中即可开始使用。
零配置:SQLite 不需要复杂的安装和配置过程,数据库存储在单个文件中,无需额外的服务器。
轻量级和高效:SQLite 的核心引擎非常小巧,占用的内存和磁盘空间少,处理小型数据集时非常高效。
跨平台支持:SQLite 支持多种操作系统,包括 Windows、Linux、macOS 等,方便跨平台开发和部署。
事务支持:SQLite 支持事务处理,确保数据的一致性和完整性。
高性能:SQLite 在读取密集型应用中表现出色,支持高达每秒 10 万次的并发查询。
高可靠性:SQLite 遵循 ACID 事务原则,确保数据的可靠性和完整性。
缺点
并发限制:SQLite 是单用户数据库,一次只能处理一个写入事务,这在高并发写入的场景下可能导致性能瓶颈。
缺乏高级特性:SQLite 不支持一些高级功能,如存储过程、触发器和外键约束。
存储空间限制:SQLite 将整个数据库存储在一个文件中,存储空间有限,不适合处理非常大的数据集。
性能限制:在处理大型数据集和高并发访问时,SQLite 的性能可能不如其他数据库系统。
SQLite 是一个轻量级、高效、跨平台的嵌入式数据库,适用于资源受限和跨平台开发场景。然而,在高并发写入的场景下,可能需要考虑其他数据库系统。
创建数据库:
import sqlite3
# 连接到 SQLite 数据库
# 如果数据库文件不存在,会自动创建
conn = sqlite3.connect('example.db')
# 创建一个游标对象
cursor = conn.cursor()
# 创建表
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
email TEXT NOT NULL UNIQUE
)
''')
# 插入数据
cursor.execute('INSERT INTO users (name, email) VALUES (?, ?)', ('Alice', 'alice@example.com'))
cursor.execute('INSERT INTO users (name, email) VALUES (?, ?)', ('Bob', 'bob@example.com'))
# 提交事务
conn.commit()
# 查询数据
cursor.execute('SELECT * FROM users')
rows = cursor.fetchall()
for row in rows:
print(row)
# 关闭连接
conn.close()
好,这是完整的代码,下面我详细解释一下
1. 导入 SQLite 库
Python复制
import sqlite3
这行代码导入了 Python 的 sqlite3 模块,这个模块允许你与 SQLite 数据库进行交互。
2. 连接到 SQLite 数据库
Python复制
conn = sqlite3.connect('example.db')
这行代码创建了一个到 SQLite 数据库的连接。如果 example.db 文件不存在,它会自动创建一个新的数据库文件。conn 是连接对象,用于与数据库进行交互。
3. 创建游标对象
Python复制
cursor = conn.cursor()
游标(Cursor)是一个对象,用于在数据库中执行 SQL 查询和检索结果。这行代码创建了一个游标对象,用于与数据库进行交互。
4. 创建表
Python复制
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
email TEXT NOT NULL UNIQUE
)
''')
这行代码使用 execute 方法执行了一条 SQL 命令,用于创建一个名为 users 的表。表的结构如下:
-
id: 整数类型,主键,自动递增。 -
name: 文本类型,不能为空。 -
email: 文本类型,不能为空,并且必须唯一。
IF NOT EXISTS 子句确保如果表已经存在,则不会尝试重新创建它,从而避免错误。
5. 插入数据
Python复制
cursor.execute('INSERT INTO users (name, email) VALUES (?, ?)', ('Alice', 'alice@example.com'))
cursor.execute('INSERT INTO users (name, email) VALUES (?, ?)', ('Bob', 'bob@example.com'))
这两行代码使用 execute 方法执行了两条 SQL 插入命令,分别向 users 表中插入了两条记录。? 是参数占位符,后面的元组提供了要插入的实际值。这种方式可以防止 SQL 注入攻击,确保数据安全。
6. 提交事务
Python复制
conn.commit()
这行代码提交了当前的事务,确保所有对数据库的更改都被保存。在 SQLite 中,事务是确保数据一致性和完整性的机制。
7. 查询数据
Python复制
cursor.execute('SELECT * FROM users')
rows = cursor.fetchall()
这行代码执行了一条 SQL 查询命令,用于检索 users 表中的所有记录。fetchall() 方法获取了查询结果的所有行,并将它们存储在 rows 变量中。
8. 打印结果
Python复制
for row in rows:
print(row)
这行代码遍历查询结果,并打印出每一行的数据。row 是一个元组,包含表中每一列的值。
9. 关闭连接
Python复制
conn.close()
这行代码关闭了与数据库的连接,释放了资源。关闭连接是确保数据库操作完成后释放系统资源的重要步骤。
总结
这段代码展示了如何使用 Python 的 sqlite3 模块来创建数据库、创建表、插入数据、查询数据并关闭连接。
下面单独将数据库中的增删改查进行讲解
增删改查
增(插入数据):
使用
INSERT INTO向数据库中添加新记录。
# 连接数据库
conn = sqlite3.connect('student.db')
# 游标
cur = conn.cursor()
# 插入数据
cur.execute('insert into student(name,age,grade)values(?,?,?)',('小牛',18,'A'))
cur.execute('insert into student(name,age,grade)values(?,?,?)',('小羊',19,'B'))
cur.execute('insert into student(name,age,grade)values(?,?,?)',('小狗',20,'C'))
#关闭连接
conn.commit()
conn.close()
解释:
插入代码使用 execute 方法执行了一条 SQL 插入命令,向 students 表中插入了一条记录。? 是参数占位符,后面的元组提供了要插入的实际值:
-
'小狗'是学生的姓名。 -
20是学生的年龄。 -
'C'是学生的成绩。
删(删除数据):
从数据库中移除现有的数据记录。
# 连接数据库
conn = sqlite3.connect('student.db')
# 游标
cur = conn.cursor()
# 删除数据
cur.execute('DELETE FROM student WHERE name = ?', ('小狗',))
#关闭连接
conn.commit()
conn.close()
解释:
-
DELETE FROM student:这是 SQL 语句,用于从student表中删除数据。 -
WHERE name = ?:WHERE子句用于指定删除条件。这里表示只删除name列等于'小狗'的记录。 -
?:这是参数占位符,用于防止 SQL 注入攻击。它确保了传入的值不会被解释为 SQL 代码。 -
('小狗',):这是一个元组,包含要传递给 SQL 语句的参数。这里只有一个参数'小狗',所以元组后面有一个逗号。
改(更新数据):
更新数据库中现有的数据记录。
# 连接数据库
conn = sqlite3.connect('student.db')
# 游标
cur = conn.cursor()
# 更新数据
cur.execute('UPDATE students SET grade = ? WHERE name = ?', ('A', '小牛'))
#关闭连接
conn.commit()
conn.close()
解释:
-
UPDATE students:指定要更新的表名为students。 -
SET grade = ?:将grade列的值设置为提供的值(在这个例子中是'A')。 -
WHERE name = ?:指定更新条件,只更新name列值为'小牛'的记录。 -
('A', '小牛'):这是一个元组,提供了UPDATE语句中?占位符的值。
查(查询数据):
从数据库中检索数据。
conn = sqlite3.connect('student.db')
cur = conn.cursor()
# 查询数据
cur.execute('SELECT * FROM student') # 执⾏查询
rows = cur.fetchall() # 获取查询结果, 返回⼀个包含元组的列表
# 打印查询结果, 每个元组代表⼀⾏数据
for row in rows:
print(row)
# 关闭连接
conn.close()
解释:
查询代码使用 execute 方法执行了一条 SQL 查询命令,用于从 student 表中检索所有记录。SELECT * FROM student 是 SQL 语句,表示选择 student 表中的所有列和所有行。
这就是简单的数据库基础

更多推荐
所有评论(0)