本篇主要讲解的数据库的基础

安装:

安装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 表中的所有列和所有行。

这就是简单的数据库基础

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐