Python中SQLite数据库操作详解:利用sqlite3模块

简介: 【4月更文挑战第13天】在Python编程中,SQLite数据库是一个轻量级的关系型数据库管理系统,它包含在一个单一的文件内,不需要一个单独的服务器进程或操作系统级别的配置。由于其简单易用和高效性,SQLite经常作为应用程序的本地数据库解决方案。Python的内置sqlite3模块提供了与SQLite数据库交互的接口,使得在Python中操作SQLite数据库变得非常容易。

本文将详细介绍如何使用sqlite3模块在Python中进行SQLite数据库的基本操作,包括创建数据库、创建表、插入数据、查询数据、更新数据和删除数据等。

一、创建数据库

在Python中使用sqlite3模块创建SQLite数据库非常简单。首先,你需要导入sqlite3模块,然后使用connect()方法连接到数据库。如果数据库文件不存在,sqlite3会自动创建它。

import sqlite3

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

# 创建一个Cursor对象,你将使用它来执行所有的SQL命令
cursor = conn.cursor()

# 关闭到数据库的连接
conn.close()

二、创建表

创建表需要使用SQL的CREATE TABLE语句。你可以通过Cursor对象的execute()方法执行SQL命令。

import sqlite3

# 连接到SQLite数据库
conn = sqlite3.connect('example.db')
cursor = conn.cursor()

# 创建一个名为users的表
cursor.execute('''CREATE TABLE IF NOT EXISTS users (
                     id INTEGER PRIMARY KEY,
                     name TEXT NOT NULL,
                     email TEXT NOT NULL UNIQUE
                   )''')

# 提交(保存)更改
conn.commit()

# 关闭连接
conn.close()

三、插入数据

插入数据通常使用SQL的INSERT INTO语句。

import sqlite3

# 连接到SQLite数据库
conn = sqlite3.connect('example.db')
cursor = conn.cursor()

# 插入一条记录
cursor.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('Alice', 'alice@example.com'))

# 提交更改
conn.commit()

# 关闭连接
conn.close()

在上述代码中,我们使用了参数化查询(使用问号占位符),这是一种推荐的做法,因为它可以帮助防止SQL注入攻击。

四、查询数据

查询数据使用SQL的SELECT语句。

import sqlite3

# 连接到SQLite数据库
conn = sqlite3.connect('example.db')
cursor = conn.cursor()

# 执行查询
cursor.execute("SELECT * FROM users")

# 获取查询结果
rows = cursor.fetchall()
for row in rows:
    print(row)

# 关闭连接
conn.close()

fetchall()方法返回查询结果的所有行。你也可以使用fetchone()方法获取结果集的下一行,或者使用fetchmany(size)获取指定数量的行。

五、更新数据

更新数据使用SQL的UPDATE语句。

import sqlite3

# 连接到SQLite数据库
conn = sqlite3.connect('example.db')
cursor = conn.cursor()

# 更新一条记录
cursor.execute("UPDATE users SET email=? WHERE id=?", ('alice@newemail.com', 1))

# 提交更改
conn.commit()

# 关闭连接
conn.close()

六、删除数据

删除数据使用SQL的DELETE语句。

import sqlite3

# 连接到SQLite数据库
conn = sqlite3.connect('example.db')
cursor = conn.cursor()

# 删除一条记录
cursor.execute("DELETE FROM users WHERE id=?", (1,))

# 提交更改
conn.commit()

# 关闭连接
conn.close()

七、事务处理

在数据库操作中,事务是一个非常重要的概念。事务是一个作为单个逻辑单元执行的工作单位。事务保证了一组操作的原子性:要么完全执行,要么完全不执行。在sqlite3中,你可以使用commit()方法提交事务,使用rollback()方法回滚事务。

import sqlite3

# 连接到SQLite数据库
conn = sqlite3.connect('example.db')
cursor = conn.cursor()

try:
    # 开始一系列数据库操作
    cursor.execute("UPDATE users SET email=? WHERE id=?", ('alice@newemail.com', 1))
    # ... 其他操作 ...

    # 如果所有操作都成功,则提交事务
    conn.commit()
except Exception as e:
    # 如果在操作过程中发生任何异常,回滚事务
    print(f"An error occurred: {e}")
    conn.rollback()
finally:
    # 关闭连接
    conn.close()

在上述代码中,我们使用try-except-finally结构来确保事务的完整性。如果在执行数据库操作期间发生任何异常,我们将回滚事务以撤销所有更改,并打印错误信息。如果所有操作都成功完成,则提交事务以保存更改。

八、使用sqlite3的Row工厂

默认情况下,当你从sqlite3查询中检索数据时,结果将被返回为元组。然而,有时你可能希望将结果作为字典,其中列名是键,对应的值是值。为此,你可以使用sqlite3的Row工厂。

import sqlite3

# 连接到SQLite数据库
conn = sqlite3.connect('example.db')

# 设置Row工厂,以便查询结果返回字典
conn.row_factory = sqlite3.Row

cursor = conn.cursor()

# 执行查询
cursor.execute("SELECT * FROM users")

# 获取查询结果,现在每一行都是一个字典
rows = cursor.fetchall()
for row in rows:
    print(row['name'], row['email'])

# 关闭连接
conn.close()

总结

sqlite3模块为Python提供了强大的SQLite数据库操作能力。通过简单的API调用,你可以执行创建数据库、表、插入、查询、更新和删除数据等操作。结合异常处理和事务管理,你可以确保数据库操作的健壮性和数据完整性。在小型应用和原型设计中,SQLite通常是一个很好的选择,因为它轻量级、易于使用,并且不需要单独配置和管理数据库服务器。

相关文章
|
2月前
|
Python
Python教程:os 与 sys 模块详细用法
os 模块用于与操作系统交互,主要涉及夹操作、路径操作和其他操作。例如,`os.rename()` 重命名文件,`os.mkdir()` 创建文件夹,`os.path.abspath()` 获取文件绝对路径等。sys 模块则用于与 Python 解释器交互,常用功能如 `sys.path` 查看模块搜索路径,`sys.platform` 检测操作系统等。这些模块提供了丰富的工具,便于开发中处理系统和文件相关任务。
91 14
|
2月前
|
SQL 数据库连接 数据库
在C++的QT框架中实现SQLite数据库的连接与操作
以上就是在C++的QT框架中实现SQLite数据库的连接与操作的基本步骤。这些步骤包括创建数据库连接、执行SQL命令、处理查询结果和关闭数据库连接。在实际使用中,你可能需要根据具体的需求来修改这些代码。
186 14
|
3月前
|
人工智能 自然语言处理 Shell
[oeasy]python070_如何导入模块_导入模块的作用_hello_dunder_双下划线
本文介绍了如何在Python中导入模块及其作用,重点讲解了`__hello__`模块的导入与使用。通过`import`命令可以将外部模块引入当前环境,增强代码功能。例如,导入`__hello__`模块后可输出“Hello world!”。此外,还演示了如何使用`help()`和`dir()`函数查询模块信息,并展示了导入多个模块的方法。最后,通过一个实例,介绍了如何利用`jieba`、`WordCloud`和`matplotlib`模块生成词云图。总结来说,模块是封装好的功能部件,能够简化编程任务并提高效率。未来将探讨如何创建自定义模块。
56 8
|
3月前
|
缓存 Shell 开发工具
[oeasy]python071_我可以自己做一个模块吗_自定义模块_引入模块_import_diy
本文介绍了 Python 中模块的导入与自定义模块的创建。首先,我们回忆了模块的概念,即封装好功能的部件,并通过导入 `__hello__` 模块实现了输出 "hello world!" 的功能。接着,尝试创建并编辑自己的模块 `my_file.py`,引入 `time` 模块以获取当前时间,并在其中添加自定义输出。
60 5
|
6月前
|
Python
Python Internet 模块
Python Internet 模块。
170 74
|
4月前
|
Python API 监控
将Python CLI工具发布为pip模块的完整指南
注册PyPI账户 访问PyPI官网注册账户 推荐使用双因素认证增强安全性 生成API令牌 访问PyPI账户管理 生成具有"Upload packages"权限的令牌,妥善保存 确保模块名唯一性 在PyPI搜索页面验证模块名未被使用 建议使用小写字母和连字符的组合(如my-cli-tool)
85 9
|
5月前
|
存储 安全 API
陪玩平台中支付与结算模块的代码,陪玩系统数据库设计与代码实现
第三方支付平台对接涉及与微信支付、支付宝等API接口的调用,确保用户支付流程顺畅。结算模块根据业务规则计算陪玩师收益,强调安全性、异常处理、可扩展性和日志记录。数据库设计涵盖用户、陪玩者、订单等信息的存储管理,确保系统稳定运行。
155 12
|
5月前
|
Python
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
66 3
|
1月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
3月前
|
关系型数据库 MySQL Java
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库

推荐镜像

更多