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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 安装Anaconda3及使用Jupyter的方法

    安装Anaconda3及使用Jupyter的方法

    这篇文章主要介绍了安装Anaconda3及使用Jupyter的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • pycharm中:OSError:[WinError 1455]页面文件太小无法完成操作问题的多种解决方法

    pycharm中:OSError:[WinError 1455]页面文件太小无法完成操作问题的多种解决方法

    这篇文章主要给大家介绍了关于pycharm中:OSError:[WinError 1455]页面文件太小无法完成操作问题的多种彻底解决方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-02-02
  • Python小工具之消耗系统指定大小内存的方法

    Python小工具之消耗系统指定大小内存的方法

    今天小编就为大家分享一篇Python小工具之消耗系统指定大小内存的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Scrapy之爬取结果导出为Excel的实现过程

    Scrapy之爬取结果导出为Excel的实现过程

    这篇文章主要介绍了Scrapy之爬取结果导出为Excel的实现过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Python深入学习之对象的属性

    Python深入学习之对象的属性

    这篇文章主要介绍了Python深入学习之对象的属性,本文从较深的层次讲解对象属性的内部运行方式,需要的朋友可以参考下
    2014-08-08
  • Python3批量移动指定文件到指定文件夹方法示例

    Python3批量移动指定文件到指定文件夹方法示例

    这篇文章主要给大家介绍了关于Python3批量移动指定文件到指定文件夹的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Python3具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • Python处理中文标点符号大集合

    Python处理中文标点符号大集合

    中文文本中可能出现的标点符号来源比较复杂,通过匹配等手段对他们处理的时候需要格外小心,防止遗漏,下面小编给大家带来了Python处理中文标点符号大集合,感兴趣的朋友跟随脚本之家小编一起看看吧
    2018-05-05
  • python常用库之NumPy和sklearn入门

    python常用库之NumPy和sklearn入门

    这篇文章主要介绍了python常用库之NumPy和sklearn入门,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • python 点云地面点滤波-progressive TIN densification(PTD)算法介绍

    python 点云地面点滤波-progressive TIN densification(PTD)算法介绍

    关于地面点滤波的概念我们要与孤立点(outlier)滤波区分开,孤立点滤波可以理解为图像中的去噪,去除数据测量过程中受到飞鸟、多路径效应所产生的远低于/高于其他数据的点。今天通过本文给大家分享python PTD点云地面点滤波的相关知识,一起看看吧
    2021-08-08
  • 通过数据库对Django进行删除字段和删除模型的操作

    通过数据库对Django进行删除字段和删除模型的操作

    这篇文章主要介绍了通过数据库对Django进行删除字段和删除模型的操作,这里假设我们已经建立了一个名为book的数据模型,需要的朋友可以参考下
    2015-07-07

最新评论