Python中如何使用sqlite3操作SQLite数据库详解

 更新时间:2025年03月14日 10:01:03   作者:莫比乌斯之梦  
这篇文章主要介绍了Python中SQLite数据库的使用,包括连接数据库、创建表、数据增删改查、事务管理和参数化查询等,并提供了操作示例,需要的朋友可以参考下

前言

在 Python 开发中,SQLite 是一种轻量级的关系型数据库,它无需单独安装数据库服务器,所有数据存储在一个单独的文件中,适用于小型应用、移动开发、数据分析等场景。Python 提供了内置的 sqlite3 模块,方便我们操作 SQLite 数据库。本文将详细介绍 sqlite3 模块的使用,包括数据库连接、表操作、数据增删改查(CRUD),以及常见的事务管理参数化查询,帮助你快速掌握 Python 操作 SQLite 数据库的方法。

1. 为什么选择 SQLite?

✅ 零配置:Python 内置支持,无需安装额外数据库服务。

✅ 文件存储:数据库仅是一个 .db 文件,便于管理。

✅ 轻量高效:适用于小型应用、测试环境、移动端存储。

✅ SQL 支持:支持 SQL 语法,易于与其他数据库迁移。

📌 SQLite 适用场景

  • 桌面应用(如浏览器、记事本应用存储用户数据)。
  • 移动应用(Android、iOS 本地数据库)。
  • 数据分析(存储小型数据集,替代 CSV 文件)。

2. 连接 SQLite 数据库

2.1 连接或创建数据库

使用 sqlite3.connect() 连接数据库:

import sqlite3

# 连接数据库(如果不存在则创建)
conn = sqlite3.connect("example.db")

print("数据库连接成功")

📌 特点

  • 如果 example.db 存在,则连接它,否则自动创建该文件。

2.2 获取游标(Cursor)

数据库操作需要使用 游标对象(cursor)

cursor = conn.cursor()

📌 作用

  • cursor.execute(sql) 用于执行 SQL 语句。
  • cursor.fetchall() 获取查询结果。

3. 创建表(CREATE TABLE)

使用 CREATE TABLE 语句创建数据库表:

cursor.execute('''
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        age INTEGER,
        city TEXT
    )
''')
conn.commit()  # 提交更改
print("表创建成功")

📌 解析

  • id INTEGER PRIMARY KEY AUTOINCREMENT:主键自增。
  • TEXT NOT NULLname 必须有值。
  • IF NOT EXISTS:避免重复创建表。

4. 插入数据(INSERT INTO)

4.1 插入单条数据

cursor.execute("INSERT INTO users (name, age, city) VALUES (?, ?, ?)",
               ("Alice", 25, "New York"))
conn.commit()
print("插入数据成功")

📌 注意

  • ? 占位符 避免 SQL 注入。
  • conn.commit() 提交事务,否则数据不会保存。

4.2 插入多条数据(executemany())

users = [
    ("Bob", 30, "San Francisco"),
    ("Charlie", 28, "Los Angeles"),
    ("David", 35, "Seattle")
]

cursor.executemany("INSERT INTO users (name, age, city) VALUES (?, ?, ?)", users)
conn.commit()
print("批量插入成功")

📌 适用于

  • 批量写入数据,避免多次 execute() 提高效率。

5. 查询数据(SELECT)

5.1 查询所有数据

cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()

for row in rows:
    print(row)

📌 fetchall() 获取所有数据,返回列表

(1, 'Alice', 25, 'New York')
(2, 'Bob', 30, 'San Francisco')
(3, 'Charlie', 28, 'Los Angeles')

5.2 查询单条数据(fetchone())

cursor.execute("SELECT * FROM users WHERE name = ?", ("Alice",))
user = cursor.fetchone()
print(user)

📌 fetchone() 获取单条数据,适用于查询唯一记录

6. 更新数据(UPDATE)

cursor.execute("UPDATE users SET age = ? WHERE name = ?", (26, "Alice"))
conn.commit()
print("数据更新成功")

📌 确保

  • SET age = ? 只更新 age 列,避免误修改其他数据。

7. 删除数据(DELETE)

cursor.execute("DELETE FROM users WHERE name = ?", ("David",))
conn.commit()
print("数据删除成功")

📌 务必小心

  • 没有 WHERE 条件会删除所有数据
  • 先 SELECT 确认数据是否存在。

8. 事务管理(commit() 和 rollback())

8.1 commit() 提交事务

conn.commit()  # 确保数据写入数据库

📌 每次 INSERT、UPDATE、DELETE 后,都要 commit() 确保数据持久化

8.2 rollback() 回滚事务

try:
    cursor.execute("UPDATE users SET age = ? WHERE name = ?", (100, "Charlie"))
    raise Exception("模拟异常")  # 模拟错误
    conn.commit()
except Exception as e:
    conn.rollback()  # 发生错误时回滚
    print("事务回滚:", e)

📌 作用

  • 如果操作失败,回滚到上一次 commit(),防止错误影响数据库。

9. 关闭数据库连接

cursor.close()
conn.close()
print("数据库连接已关闭")

📌 最佳实践

  • 完成所有数据库操作后,应关闭连接,释放资源。

10. 结合 with 语句自动管理连接

Python 提供 with 语法,自动关闭数据库连接

with sqlite3.connect("example.db") as conn:
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM users")
    print(cursor.fetchall())

📌 优势

  • 自动 commit()
  • 异常发生时自动 rollback()
  • 退出时自动关闭 conn

11. 使用 Row 以字典方式访问数据

默认 fetchall() 返回元组

cursor.execute("SELECT * FROM users")
print(cursor.fetchone())  # (1, 'Alice', 25, 'New York')

可以改用 sqlite3.Row 使数据可用字典访问

conn.row_factory = sqlite3.Row  # 设置行工厂
cursor = conn.cursor()

cursor.execute("SELECT * FROM users")
row = cursor.fetchone()
print(row["name"], row["age"])  # Alice 25

📌 适用于

  • 提高可读性,避免 row[0] 这样的索引访问方式。

12. 结论

操作代码示例
连接数据库conn = sqlite3.connect("example.db")
创建表CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)
插入数据INSERT INTO users (name, age) VALUES (?, ?)
查询数据SELECT * FROM users
更新数据UPDATE users SET age = ? WHERE name = ?
删除数据DELETE FROM users WHERE name = ?
事务管理commit() / rollback()
关闭连接conn.close()

sqlite3 是 Python 内置的数据库模块,适用于小型应用、测试、数据存储等场景。掌握这些操作,你就可以轻松管理 SQLite 数据库,提升开发效率!

总结

到此这篇关于Python中如何使用sqlite3操作SQLite数据库的文章就介绍到这了,更多相关Python sqlite3操作SQLite内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python程序打包工具py2exe和PyInstaller详解

    Python程序打包工具py2exe和PyInstaller详解

    这篇文章主要介绍了Python程序打包工具py2exe和PyInstaller详解,如果可以提前将程序打包成 Windows平台的 .exe 文件或者是Linux下的 .sh 脚本,那么使用起来就会方便很多,需要的朋友可以参考下
    2019-06-06
  • Python牛刀小试密码爆破

    Python牛刀小试密码爆破

    用Python与vbs分别实现的爆破bbs论坛账号的代码,学习python或vbs的朋友可以参考下。
    2011-02-02
  • python清除字符串中间空格的实例讲解

    python清除字符串中间空格的实例讲解

    今天小编就为大家分享一篇python清除字符串中间空格的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Python练习之制作企业奖金计算器

    Python练习之制作企业奖金计算器

    在本篇博客中,我们将使用Python代码解决一个企业奖金计算的问题,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-06-06
  • Django的数据模型访问多对多键值的方法

    Django的数据模型访问多对多键值的方法

    这篇文章主要介绍了Django的数据模型访问多对多键值的方法,Django是Python丰富多彩的web框架中最具人气的一个,需要的朋友可以参考下
    2015-07-07
  • NumPy双曲函数与集合操作详解

    NumPy双曲函数与集合操作详解

    NumPy 提供了 sinh()、cosh() 和 tanh() 等 ufunc,它们接受弧度值并生成相应的双曲正弦、双曲余弦和双曲正切值,我们可以使用 NumPy 的 unique() 方法从任何数组中找到唯一元素,本文给大家详细介绍了NumPy双曲函数与集合操作,需要的朋友可以参考下
    2024-06-06
  • 使用 Supervisor 监控 Python3 进程方式

    使用 Supervisor 监控 Python3 进程方式

    今天小编就为大家分享一篇使用 Supervisor 监控 Python3 进程方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 讯飞webapi语音识别接口调用示例代码(python)

    讯飞webapi语音识别接口调用示例代码(python)

    这篇文章主要介绍了如何使用Python3调用讯飞WebAPI语音识别接口,重点解决了在处理语音识别结果时判断是否为最后一帧的问题,通过运行代码并总结经验,解决了常见的模块和属性错误,需要的朋友可以参考下
    2025-03-03
  • tensorflow中tf.reduce_mean函数的使用

    tensorflow中tf.reduce_mean函数的使用

    这篇文章主要介绍了tensorflow中tf.reduce_mean函数的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • 详解python3 GUI刷屏器(附源码)

    详解python3 GUI刷屏器(附源码)

    这篇文章主要介绍了详解python3 GUI刷屏器(附源码),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02

最新评论