Python 中的 SQLite3:轻量级数据库操作全攻略

Python 中的 SQLite3:轻量级数据库操作全攻略

在 Python 开发中,处理数据存储与管理是常见需求。SQLite 作为一款轻量级的数据库,无需单独的服务器进程,以文件形式存储数据,非常适合小型项目和嵌入式系统。Python 的 sqlite3 模块提供了与 SQLite 数据库交互的接口,使开发者能够方便地进行数据库操作。本文将结合 Python 官方文档(https://docs.python.org/zh-cn/3.12/library/sqlite3.html),详细讲解 sqlite3 模块的使用,涵盖基础概念、连接数据库、执行 SQL 语句、事务处理等内容,帮助你全面掌握这一实用工具。

文章目录

  • Python 中的 SQLite3:轻量级数据库操作全攻略
    • 一、SQLite3 基础概念
      • (一)什么是 SQLite
      • (二)Python 的 `sqlite3` 模块
      • (三)与其他数据库模块的比较
    • 二、连接 SQLite 数据库
      • (一)使用 `connect()` 方法
      • (二)创建游标对象
    • 三、执行 SQL 语句
      • (一)创建表
      • (二)插入数据
      • (三)查询数据
      • (四)更新数据
      • (五)删除数据
    • 四、事务处理
      • (一)事务的概念
      • (二)Python 中的事务处理
    • 五、关闭数据库连接
    • 六、自定义数据类型和转换器
      • (一)自定义数据类型
    • 总结
    • TAG: Python、sqlite3 模块、SQLite 数据库、数据库操作、事务处理
    • 相关学习资源

一、SQLite3 基础概念

(一)什么是 SQLite

SQLite 是一个开源的嵌入式关系型数据库管理系统,它将整个数据库存储在一个单一的跨平台文件中。SQLite 具有零配置、无需服务器、轻量级、高性能等特点,广泛应用于移动应用、嵌入式系统和小型桌面应用等场景。

(二)Python 的 sqlite3 模块

sqlite3 是 Python 标准库中的一个模块,它提供了一个符合 DB - API 2.0 规范的接口,用于与 SQLite 数据库进行交互。通过 sqlite3 模块,开发者可以在 Python 代码中方便地创建数据库、执行 SQL 语句、管理事务等。

(三)与其他数据库模块的比较

数据库模块 特点 适用场景
sqlite3 轻量级,无需服务器,以文件形式存储数据,操作简单 小型项目、嵌入式系统、移动应用,对数据量和并发要求不高的场景
mysql - connector - python 需要独立的服务器进程,支持高并发和大数据量,功能强大 企业级 Web 应用、大型数据管理系统,对性能和功能要求较高的场景
psycopg2 用于连接 PostgreSQL 数据库,支持复杂查询和高级特性 需要使用 PostgreSQL 数据库的专业应用,如地理信息系统、数据仓库等

二、连接 SQLite 数据库

(一)使用 connect() 方法

要与 SQLite 数据库进行交互,首先需要建立连接。可以使用 sqlite3.connect() 方法来创建一个数据库连接对象。如果指定的数据库文件不存在,该方法会自动创建一个新的数据库文件。示例代码如下:

import sqlite3

# 连接到 SQLite 数据库(如果数据库文件不存在,会自动创建)
conn = sqlite3.connect('example.db')

(二)创建游标对象

连接成功后,需要创建一个游标对象。游标用于执行 SQL 语句并处理结果。可以使用连接对象的 cursor() 方法创建游标对象。示例代码如下:

# 创建游标对象
cursor = conn.cursor()

三、执行 SQL 语句

(一)创建表

可以使用 CREATE TABLE 语句在数据库中创建表。以下是一个创建 users 表的示例:

# 创建 users 表
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    age INTEGER
)
''')

(二)插入数据

使用 INSERT INTO 语句向表中插入数据。可以使用占位符(?)来防止 SQL 注入攻击。示例代码如下:

# 插入单条数据
name = 'John'
age = 25
cursor.execute('INSERT INTO users (name, age) VALUES (?,?)', (name, age))

# 插入多条数据
users = [('Alice', 30), ('Bob', 22)]
cursor.executemany('INSERT INTO users (name, age) VALUES (?,?)', users)

(三)查询数据

使用 SELECT 语句从表中查询数据。查询结果可以通过游标对象的 fetchone()fetchmany()fetchall() 方法获取。示例代码如下:

# 查询所有数据
cursor.execute('SELECT * FROM users')
all_users = cursor.fetchall()
for user in all_users:
    print(user)

# 查询单条数据
cursor.execute('SELECT * FROM users WHERE id = 1')
single_user = cursor.fetchone()
print(single_user)

(四)更新数据

使用 UPDATE 语句更新表中的数据。示例代码如下:

# 更新数据
new_age = 26
user_id = 1
cursor.execute('UPDATE users SET age =? WHERE id =?', (new_age, user_id))

(五)删除数据

使用 DELETE 语句从表中删除数据。示例代码如下:

# 删除数据
user_id = 2
cursor.execute('DELETE FROM users WHERE id =?', (user_id,))

四、事务处理

(一)事务的概念

事务是一组不可分割的数据库操作序列,要么全部执行成功,要么全部失败回滚。在 SQLite 中,默认情况下,每个 SQL 语句都是一个单独的事务。可以使用 BEGINCOMMITROLLBACK 语句来管理事务。

(二)Python 中的事务处理

sqlite3 模块中,可以使用连接对象的 commit()rollback() 方法来提交或回滚事务。示例代码如下:

try:
    # 开始事务
    conn.execute('BEGIN')
    # 执行一系列 SQL 语句
    cursor.execute('INSERT INTO users (name, age) VALUES (?,?)', ('Eve', 28))
    cursor.execute('UPDATE users SET age = 31 WHERE name =?', ('Alice',))
    # 提交事务
    conn.commit()
except Exception as e:
    # 回滚事务
    conn.rollback()
    print(f"Transaction failed: {e}")

五、关闭数据库连接

在完成数据库操作后,需要关闭游标对象和数据库连接,以释放资源。示例代码如下:

# 关闭游标对象
cursor.close()
# 关闭数据库连接
conn.close()

六、自定义数据类型和转换器

(一)自定义数据类型

SQLite 本身支持有限的数据类型,但可以通过自定义数据类型来存储更复杂的数据。在 sqlite3 模块中,可以使用 register_adapter()register_converter() 函数来实现自定义数据类型的存储和读取。示例代码如下:

import sqlite3

# 自定义数据类型
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

# 适配器函数,将 Point 对象转换为字节类型
def adapt_point(point):
    return f"{point.x},{point.y}".encode()

# 转换器函数,将字节类型转换为 Point 对象
def convert_point(s):
    x, y = map(int, s.decode().split(','))
    return Point(x, y)

# 注册适配器和转换器
sqlite3.register_adapter(Point, adapt_point)
sqlite3.register_converter("POINT", convert_point)

# 连接数据库并使用自定义数据类型
conn = sqlite3.connect(':memory:', detect_types=sqlite3.PARSE_DECLTYPES)
cursor = conn.cursor()
cursor.execute('CREATE TABLE points (p POINT)')
p = Point(1, 2)
cursor.execute('INSERT INTO points (p) VALUES (?)', (p,))
cursor.execute('SELECT p FROM points')
result = cursor.fetchone()[0]
print(result.x, result.y)

总结

sqlite3 模块为 Python 开发者提供了一个方便、高效的方式来与 SQLite 数据库进行交互。通过建立连接、执行 SQL 语句、管理事务和处理自定义数据类型等操作,可以满足各种小型项目的数据存储需求。在使用过程中,要注意 SQL 注入安全问题,合理管理事务以保证数据的一致性,并且及时关闭数据库连接以释放资源。

TAG: Python、sqlite3 模块、SQLite 数据库、数据库操作、事务处理

相关学习资源

  1. Python 官方文档:https://docs.python.org/zh-cn/3.12/library/sqlite3.html
    提供了 sqlite3 模块的详细文档,包括函数定义、使用方法、示例代码等,是学习 sqlite3 模块的权威资料。
  2. SQLite 官方网站:https://www.sqlite.org/
    包含 SQLite 数据库的详细信息、文档和教程,有助于深入了解 SQLite 的特性和使用方法。
  3. 《Python 数据库编程实战》:书籍深入讲解了 Python 与各种数据库的交互,包括 sqlite3 模块的使用,通过丰富的案例帮助读者掌握数据库编程技巧。
  4. Tekin的Python编程秘籍库: Python 实用知识与技巧分享,涵盖基础、爬虫、数据分析等干货 本 Python 专栏聚焦实用知识,深入剖析基础语法、数据结构。分享爬虫、数据分析等热门领域实战技巧,辅以代码示例。无论新手入门还是进阶提升,都能在此收获满满干货,快速掌握 Python 编程精髓。

你可能感兴趣的:(Python网络编程,Python,编程秘籍库,数据库,python,sqlite)