【Python进阶】Python中的数据库交互:使用SQLite进行本地数据存储

1、数据持久化与访问效率

数据持久化是指程序运行过程中产生的数据能够长期保存,即使程序关闭或系统重启后仍可读取和修改。通过数据库,我们可以确保数据持久化的同时,实现数据的快速访问。例如,银行系统需要实时更新账户余额,并保证在高并发环境下数据的一致性,这就需要依赖数据库的事务处理能力和高效的索引机制。

实例解析: 考虑一个简单的图书管理系统,用户可以添加、查询、修改和删除书籍信息。我们借助SQLite数据库实现数据持久化,以下是一个创建书籍表并插入数据的Python代码片段:

import sqlite3

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

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

# 定义书籍表结构
cursor.execute('''CREATE TABLE IF NOT EXISTS Books
                 (ID INTEGER PRIMARY KEY,
                  Title TEXT,
                  Author TEXT,
                  Publisher TEXT)''')

# 插入书籍数据
book_data = ('001', 'Python Programming', 'John Doe', 'Tech Publisher')
cursor.execute("INSERT INTO Books VALUES (?, ?, ?, ?)", book_data)

# 提交事务
conn.commit()

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

这段代码展示了如何通过Python内置的sqlite3模块与SQLite数据库交互,完成数据的持久化存储。同时,SQLite支持快速查找和更新数据,对于频繁查询和修改的需求提供了有力的支持。

2、数据库系统概览

2.1 关系型数据库与非关系型数据库

数据库系统作为现代应用的基础架构,主要分为关系型数据库(Relational Database)和非关系型数据库(NoSQL Database)两大阵营。关系型数据库遵循关系模型理论,数据以表格形式存储,并通过预定义的关系来建立不同表格之间的联系,如MySQL、PostgreSQL及本章将重点探讨的SQLite。

2.1.1 SQL与NoSQL数据库对比

SQL(Structured Query Language)是关系型数据库的标准语言,其核心特点是强一致性、事务处理以及高度结构化的数据存储。SQL数据库通过预先设定好的表格结构(Schema),确保了数据的一致性和完整性,适用于高度结构化、复杂事务处理的应用场景。

相比之下,NoSQL数据库放弃了严格的表格结构约束,更适合处理大量非结构化或半结构化数据,具有水平扩展性强、高性能读写等特点。常见的NoSQL数据库包括MongoDB(文档型)、Cassandra(列族型)和Redis(键值型)。然而,NoSQL数据库通常不支持完整的ACID(原子性、一致性、隔离性、持久性)事务,而是采取BASE(Basically Available, Soft-state, Eventually Consistent)模型,以牺牲一定程度的数据一致性换取更高的可用性和扩展性。

2.2 SQLite数据库简介

2.2.1 SQLite的特点与适用场景

SQLite是一款轻量级、零配置、服务器less的嵌入式SQL数据库引擎,它的文件型数据库设计使得它可以被轻松地内置于各种应用程序中,无需单独部署数据库服务器。SQLite非常适合小型、单用户、移动设备或客户端应用,例如手机APP、桌面软件和个人数据存储。

独立性:SQLite数据库就是一个单一的文件,易于携带和备份。
嵌入式:SQLite直接与应用程序集成,不需要额外的数据库服务器进程。
性能:尽管是轻量级数据库,但SQLite依然具备强大的性能表现,尤其在读取密集型任务上表现出色。

2.2.2 SQLite与其它数据库系统的比较

相比MySQL、PostgreSQL等传统关系型数据库,SQLite在资源占用、部署简易度等方面具有显著优势。然而,对于多用户、高并发环境下的企业级应用,SQLite可能不是最佳选择,因为其并发控制能力有限,且不支持多用户同时写入同一数据库文件。

下面展示一段SQLite数据库的基本操作示例,帮助读者直观感受SQLite的使用方式:

import sqlite3

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

# 创建游标对象用于执行SQL命令
cursor = conn.cursor()

# 创建一个名为Users的新表
cursor.execute('''CREATE TABLE Users
                 (Id INTEGER PRIMARY KEY AUTOINCREMENT,
                  Username TEXT NOT NULL UNIQUE,
                  Email TEXT NOT NULL UNIQUE)''')

# 插入一条用户数据
cursor.execute("INSERT INTO Users (Username, Email) VALUES (?, ?)", ('Alice', 'alice@example.com'))

# 提交事务
conn.commit()

# 查询所有用户数据
cursor.execute("SELECT * FROM Users")
print(cursor.fetchall())

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

这段Python代码演示了如何使用sqlite3模块创建SQLite数据库、定义表格、插入数据以及查询数据的过程,体现了SQLite简单易用的特性。通过深入了解SQLite与其他数据库系统的异同,开发者可以根据项目需求灵活选择合适的数据库技术,有效应对各类数据存储挑战。

3、Python与SQLite的集成

3.1 Python标准库:sqlite3

在Python世界中,SQLite得到了官方标准库sqlite3的全力支持,使得开发者能够便捷地在Python程序中利用SQLite进行本地数据存储和管理。

3.1.1 安装与引入sqlite3模块

Python自带sqlite3模块,无需额外安装即可直接使用。只需在Python脚本中通过import sqlite3语句引入该模块,就可以开始SQLite数据库之旅。

import sqlite3

3.2 创建与管理SQLite数据库

3.2.1 连接SQLite数据库

当要与SQLite数据库交互时,首先需要建立连接。连接既可以指向一个新的数据库文件,也可以打开一个已经存在的SQLite数据库。

3.2.1.1 创建新数据库

新建数据库非常简单,只要在连接字符串中指定数据库名称即可。如果对应的文件不存在,sqlite3会自动创建新的数据库文件。

# 创建并连接到新的SQLite数据库(如果不存在,则创建)
conn = sqlite3.connect('new_database.db')
3.2.1.2 打开已存在的数据库

若数据库文件已经存在,只需提供正确的路径即可打开。

# 打开已存在的SQLite数据库
existing_conn = sqlite3.connect('/path/to/existing_database.db')

3.2.2 数据库连接与游标的使用

数据库连接:连接对象(如conn)是与SQLite数据库交互的主要途径,负责开启和管理整个数据库会话。
游标:在连接对象上调用cursor()方法可以获取一个游标对象,它是执行SQL命令和获取查询结果的接口。通过游标执行SQL语句,提交事务,以及处理结果集。

# 获取游标对象
cursor = conn.cursor()

# 执行一条SQL语句(例如创建一个新表)
cursor.execute("CREATE TABLE my_table (id INTEGER PRIMARY KEY, name TEXT)")

# 提交事务,确保更改生效
conn.commit()

3.2.3 数据库事务控制与ACID属性

SQLite遵循ACID原则,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。在Python中,可以通过数据库连接对象的begin()、commit()和rollback()方法来进行事务控制。

try:
    # 开始一次事务
    conn.begin()

    cursor.execute("INSERT INTO my_table (name) VALUES (?)", ('Alice',)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值