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通常是一个很好的选择,因为它轻量级、易于使用,并且不需要单独配置和管理数据库服务器。

相关文章
|
11天前
|
弹性计算 数据管理 数据库
从零开始构建员工管理系统:Python与SQLite3的完美结合
本文介绍如何使用Python和Tkinter构建一个图形界面的员工管理系统(EMS)。系统包括数据库设计、核心功能实现和图形用户界面创建。主要功能有查询、添加、删除员工信息及统计员工数量。通过本文,你将学会如何结合SQLite数据库进行数据管理,并使用Tkinter创建友好的用户界面。
从零开始构建员工管理系统:Python与SQLite3的完美结合
|
5天前
|
Python
在Python中,可以使用内置的`re`模块来处理正则表达式
在Python中,可以使用内置的`re`模块来处理正则表达式
16 5
|
15天前
|
Java 程序员 开发者
Python的gc模块
Python的gc模块
|
18天前
|
数据采集 Web App开发 JavaScript
python-selenium模块详解!!!
Selenium 是一个强大的自动化测试工具,支持 Python 调用浏览器进行网页抓取。本文介绍了 Selenium 的安装、基本使用、元素定位、高级操作等内容。主要内容包括:发送请求、加载网页、元素定位、处理 Cookie、无头浏览器设置、页面等待、窗口和 iframe 切换等。通过示例代码帮助读者快速掌握 Selenium 的核心功能。
62 5
|
19天前
|
Python
SciPy 教程 之 SciPy 模块列表 13
SciPy教程之SciPy模块列表13:单位类型。常量模块包含多种单位,如公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了如何使用`constants`模块获取零摄氏度对应的开尔文值(273.15)和华氏度与摄氏度的转换系数(0.5556)。
17 1
|
17天前
|
Python
SciPy 教程 之 SciPy 模块列表 16
SciPy教程之SciPy模块列表16 - 单位类型。常量模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了力学单位的使用,如牛顿、磅力和千克力等。
15 0
|
18天前
|
JavaScript Python
SciPy 教程 之 SciPy 模块列表 15
SciPy 教程之 SciPy 模块列表 15 - 功率单位。常量模块包含多种单位,如公制、质量、时间等。功率单位中,1 瓦特定义为 1 焦耳/秒,表示每秒转换或耗散的能量速率。示例代码展示了如何使用 `constants` 模块获取马力值(745.6998715822701)。
15 0
|
18天前
|
JavaScript Python
SciPy 教程 之 SciPy 模块列表 15
SciPy教程之SciPy模块列表15:单位类型。常量模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。功率单位以瓦特(W)表示,1W=1J/s。示例代码展示了如何使用`constants`模块获取马力(hp)的值,结果为745.6998715822701。
16 0
|
19天前
|
Python
SciPy 教程 之 SciPy 模块列表 13
SciPy 教程之 SciPy 模块列表 13 - 单位类型。常量模块包含多种单位:公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例:`constants.zero_Celsius` 返回 273.15 开尔文,`constants.degree_Fahrenheit` 返回 0.5555555555555556。
13 0
|
20天前
|
Python
SciPy 教程 之 SciPy 模块列表 11
SciPy教程之SciPy模块列表11:单位类型。常量模块包含公制单位、质量单位、角度换算、时间单位、长度单位、压强单位、体积单位、速度单位、温度单位、能量单位、功率单位、力学单位等。体积单位示例展示了不同体积单位的换算,如升、加仑、流体盎司、桶等。
15 0