怎样使用 Python 的 sqlite3 模块操作 SQLite 数据库?

打印 上一主题 下一主题

主题 999|帖子 999|积分 2997

怎样使用 Python 的 sqlite3 模块操作 SQLite 数据库?

SQLite 是一种轻量级的数据库,它不需要服务器,数据库被存储在一个文件中,非常适合嵌入式系统或桌面应用程序。Python 尺度库中包含了一个名为 sqlite3 的模块,可以直接用于与 SQLite 数据库进行交互。本文将具体先容怎样使用 Python 的 sqlite3 模块来操作 SQLite 数据库,适合初学者和有数据库根本的人明白。

一、SQLite 简介

1.1 什么是 SQLite?

SQLite 是一种自包含、无服务器、零配置的关系型数据库管理系统(RDBMS)。它的特点是数据存储在一个单一的文件中,不需要像 MySQL、PostgreSQL 等那样配置复杂的数据库服务器,非常适合轻量级应用或快速开辟时使用。
主要特点:


  • 轻量级:SQLite 是一个小型的数据库引擎,易于嵌入应用中。
  • 无服务器:它不需要像其他数据库管理系统那样的服务器进程,数据库文件就存储在当地。
  • 易用性:SQLite 操作简单,且无需特别的配置,尤其适合开辟和测试阶段。
  • 跨平台:SQLite 可以在各种操作系统上运行,包括 Windows、Linux、macOS 等。
1.2 SQLite 的使用场景



  • 嵌入式应用:SQLite 常用于手机应用或嵌入式设备中,因为它不需要服务器支持,使用机动。
  • 桌面应用:很多桌面应用也使用 SQLite 来存储配置信息或用户数据。
  • 开辟和测试:由于安装配置简单,开辟人员经常在开辟和测试阶段使用 SQLite 来验证数据库功能。
  • 小型网站:对于一些不需要大量并发和数据操作的应用,SQLite 也是一种很好的选择。
二、Python 的 sqlite3 模块

Python 内置的 sqlite3 模块可以让我们非常方便地操作 SQLite 数据库。接下来我们会先容怎样通过这个模块创建数据库、创建表、插入数据、查询数据等根本操作。
2.1 安装与导入 sqlite3 模块

sqlite3 是 Python 尺度库的一部门,所以不需要安装第三方库,直接导入即可。
  1. import sqlite3
复制代码
2.2 创建或连接到 SQLite 数据库

在 SQLite 中,数据库是存储在文件中的。如果指定的数据库文件不存在,sqlite3 会自动创建一个新的数据库文件。
  1. import sqlite3
  2. # 连接到数据库,如果数据库不存在,则会创建一个新文件conn = sqlite3.connect('example.db')# 创建游标对象,操作数据库的SQL语句要通过游标来执行cursor = conn.cursor()print("数据库连接成功!")
复制代码
上述代码将连接或创建一个名为 example.db 的数据库文件。如果文件存在,connect 方法将连接到现有的数据库;如果文件不存在,则创建新的数据库文件。
2.3 创建表

创建表的语句与尺度 SQL 语法雷同。在 SQLite 中,你可以通过 CREATE TABLE 语句来创建新表。
  1. # 创建一个名为 users 的表
  2. cursor.execute('''
  3.     CREATE TABLE IF NOT EXISTS users (
  4.         id INTEGER PRIMARY KEY AUTOINCREMENT,
  5.         name TEXT NOT NULL,
  6.         age INTEGER,
  7.         email TEXT
  8.     )
  9. ''')
  10. print("表创建成功!")
复制代码
这里,我们创建了一个 users 表,包含四个字段:


  • id:主键,自动递增(AUTOINCREMENT)。
  • name:用户的名字,非空(NOT NULL)。
  • age:用户的年龄,整数范例。
  • email:用户的电子邮件地址。
2.4 插入数据

插入数据使用 INSERT INTO 语句。可以通过参数化查询来避免 SQL 注入。
  1. # 插入单条记录
  2. cursor.execute('''
  3.     INSERT INTO users (name, age, email)
  4.     VALUES (?, ?, ?)
  5. ''', ("Alice", 25, "alice@example.com"))
  6. # 插入多条记录
  7. users = [
  8.     ("Bob", 30, "bob@example.com"),
  9.     ("Charlie", 22, "charlie@example.com"),
  10.     ("Diana", 28, "diana@example.com")
  11. ]
  12. cursor.executemany('''
  13.     INSERT INTO users (name, age, email)
  14.     VALUES (?, ?, ?)
  15. ''', users)
  16. # 提交事务
  17. conn.commit()
  18. print("数据插入成功!")
复制代码
在这里,我们通过 ? 占位符来代替具体的值,防止 SQL 注入攻击。使用 executemany 方法可以批量插入多条数据。
2.5 查询数据

查询数据使用 SELECT 语句,查询效果可以通过游标的 fetchone()、fetchall() 方法获取。
  1. # 查询所有用户
  2. cursor.execute("SELECT * FROM users")
  3. # 获取所有结果
  4. rows = cursor.fetchall()
  5. for row in rows:
  6.     print(row)
复制代码
查询效果是一个包含每一行数据的列表,每一行数据是一个元组。
2.6 更新数据

更新数据使用 UPDATE 语句。
  1. # 更新用户的年龄
  2. cursor.execute('''
  3.     UPDATE users SET age = ? WHERE name = ?
  4. ''', (26, "Alice"))
  5. # 提交事务
  6. conn.commit()
  7. print("数据更新成功!")
复制代码
这里将名字为 “Alice” 的用户年龄更新为 26。
2.7 删除数据

删除数据使用 DELETE FROM 语句。
  1. # 删除名字为 'Bob' 的用户
  2. cursor.execute('''
  3.     DELETE FROM users WHERE name = ?
  4. ''', ("Bob",))
  5. # 提交事务
  6. conn.commit()
  7. print("数据删除成功!")
复制代码
这条语句将删除名字为 “Bob” 的用户记录。
2.8 关闭连接

完成数据库操作后,肯定要记得关闭游标和数据库连接。
  1. # 关闭游标
  2. cursor.close()
  3. # 关闭数据库连接
  4. conn.close()
  5. print("数据库连接已关闭")
复制代码
三、处理事务

SQLite 默认运行在自动提交模式下,这意味着每一条执行的 SQL 语句(如 INSERT、UPDATE、DELETE)都会立即生效。如果你希望将多个操作作为一个事务来执行,可以使用 BEGIN TRANSACTION 和 COMMIT 语句。
  1. try:
  2.     # 开始事务
  3.     conn.execute("BEGIN TRANSACTION")
  4.     # 执行一系列数据库操作
  5.     cursor.execute('''
  6.         INSERT INTO users (name, age, email)
  7.         VALUES (?, ?, ?)
  8.     ''', ("Eve", 29, "eve@example.com"))
  9.     cursor.execute('''
  10.         UPDATE users SET age = ? WHERE name = ?
  11.     ''', (30, "Charlie"))
  12.     # 提交事务
  13.     conn.commit()
  14.     print("事务提交成功!")
  15. except sqlite3.Error as e:
  16.     # 出现错误时回滚事务
  17.     conn.rollback()
  18.     print(f"发生错误,事务回滚:{e}")
复制代码
在这个例子中,我们将多条操作包裹在一个事务中,如果在某个操作中发生错误,我们可以使用 rollback 回滚事务,确保数据库不会被修改。
四、参数化查询和 SQL 注入

SQL 注入是常见的数据库攻击本事之一,通过向 SQL 查询中插入恶意代码,攻击者可以获取或修改数据库中的敏感信息。为了避免这种攻击,应该始终使用参数化查询而不是直接拼接字符串。
错误的做法:
  1. # 拼接字符串容易导致 SQL 注入
  2. name = "Alice"
  3. age = 25
  4. cursor.execute(f"INSERT INTO users (name, age) VALUES ('{name}', {age})")
复制代码
正确的做法:
  1. # 使用参数化查询
  2. cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", (name, age))
复制代码
通过使用 ? 占位符和参数化查询,可以避免 SQL 注入的风险。
五、SQLite 的数据范例

SQLite 使用动态范例系统,它的范例系统不像 MySQL、PostgreSQL 那样严格。在 SQLite 中,数据范例大抵分为五类:


  • NULL:值是空值。
  • INTEGER:整数范例,正数或负数。
  • REAL:浮点数范例。
  • TEXT:字符串范例。
  • BLOB:二进制大对象,存储二进制数据。
虽然你可以在创建表时指定字段的范例,但是 SQLite 在插入数据时允许你插入与字段范例不匹配的数据。这意味着纵然你为某个字段声明了 INTEGER 范例,你仍然可以插入一个文本字符串。
六、SQLite 的限制与实用场景

SQLite 虽然轻量且易于使用,但它并不实用于全部场景。它的性能和并发能力相对有限,因此更适合单用户桌面应用或嵌入式设备。
6.1 适合的场景



  • 单用户桌面应用
  • 嵌入式设备
  • 开辟
、测试数据库


  • 小型网站或应用
6.2 不适合的场景



  • 高并发、多用户的 Web 应用
  • 需要复杂事务处理的大型应用
  • 数据量非常大的项目
总结

通过 Python 的 sqlite3 模块,你可以轻松地与 SQLite 数据库进行交互,创建数据库、表,执行插入、查询、更新、删除等操作。SQLite 的轻量级特性使其非常适合嵌入式应用、桌面应用和快速原型开辟。
尽管 SQLite 并不适合处理高并发或大规模的数据存储,但对于小型应用或项目,它是一个非常实用的数据库选择。Python 内置的 sqlite3 模块大大简化了 SQLite 数据库操作,非常适合初学者使用。
掌握了这些根本操作后,你可以根据本身的项目需求,机动地使用 SQLite 或其他数据库进行开辟。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

不到断气不罢休

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表