🗄️ Python数据库操作:SQLite完全指南——从入门到实战

# 🗄️ Python数据库操作:SQLite完全指南——从入门到实战 > 掌握Python内置的轻量级数据库,让你的数据持久化变得简单高效 ## 引言 在Python开发中,数据持久化是一个不可避免的话题。无论是小型脚本还是中型应用,我们都需要一种简单可靠的方式来存储和查询数据。**SQLite** 是Python标准库内置的轻量级关系型数据库,它无需单独安装服务器,数据存储在单个文件中,是Python开发者的理想选择。 本文将带你全面了解如何在Python中使用SQLite,从基础操作到进阶技巧,助你快速上手数据库编程。 --- ## 什么是SQLite? SQLite是一个**嵌入式关系型数据库引擎**,它的特点是: - ✅ **零配置**:无需安装、配置服务器 - ✅ **轻量级**:完整功能仅几百KB - ✅ **单文件存储**:所有数据保存在一个.db文件中 - ✅ **跨平台**:Windows、Linux、macOS通用 - ✅ **Python内置**:通过`sqlite3`模块直接使用 --- ## 基础操作 ### 1. 连接数据库 ```python import sqlite3 # 连接到数据库(如果不存在则自动创建) conn = sqlite3.connect('my_database.db') # 创建游标对象 cursor = conn.cursor() ``` ### 2. 创建表 ```python # 创建用户表 cursor.execute(''' CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, email TEXT UNIQUE, age INTEGER, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ''') conn.commit() ``` ### 3. 插入数据 ```python # 单条插入 cursor.execute(''' INSERT INTO users (name, email, age) VALUES (?, ?, ?) ''', ('张三', 'zhangsan@example.com', 25)) # 批量插入 users = [ ('李四', 'lisi@example.com', 30), ('王五', 'wangwu@example.com', 28), ('赵六', 'zhaoliu@example.com', 35) ] cursor.executemany(''' INSERT INTO users (name, email, age) VALUES (?, ?, ?) ''', users) conn.commit() ``` ### 4. 查询数据 ```python # 查询所有用户 cursor.execute('SELECT * FROM users') all_users = cursor.fetchall() for user in all_users: print(user) # 条件查询 cursor.execute('SELECT * FROM users WHERE age > ?', (25,)) results = cursor.fetchall() # 查询单条记录 cursor.execute('SELECT * FROM users WHERE id = ?', (1,)) user = cursor.fetchone() print(user) ``` ### 5. 更新和删除 ```python # 更新数据 cursor.execute(''' UPDATE users SET age = ? WHERE name = ? ''', (26, '张三')) # 删除数据 cursor.execute('DELETE FROM users WHERE id = ?', (4,)) conn.commit() ``` --- ## 最佳实践:使用上下文管理器 ```python import sqlite3 # 使用上下文管理器自动处理连接和事务 with sqlite3.connect('my_database.db') as conn: cursor = conn.cursor() # 执行多个操作 cursor.execute('INSERT INTO users (name, email) VALUES (?, ?)', ('小明', 'xiaoming@example.com')) cursor.execute('SELECT * FROM users') results = cursor.fetchall() # 自动提交事务 # 连接自动关闭 ``` --- ## 进阶技巧 ### 1. 事务处理 ```python try: cursor.execute('BEGIN TRANSACTION') # 执行多个相关操作 cursor.execute('UPDATE accounts SET balance = balance - 100 WHERE id = 1') cursor.execute('UPDATE accounts SET balance = balance + 100 WHERE id = 2') conn.commit() # 所有操作成功才提交 except sqlite3.Error as e: conn.rollback() # 出错时回滚 print(f"错误:{e}") ``` ### 2. 字典形式返回结果 ```python # 设置行工厂函数,返回字典形式 def dict_factory(cursor, row): d = {} for idx, col in enumerate(cursor.description): d[col[0]] = row[idx] return d conn.row_factory = dict_factory cursor = conn.cursor() cursor.execute('SELECT * FROM users') users = cursor.fetchall() # 返回字典列表 ``` --- ## 完整实战代码 ```python import sqlite3 from datetime import datetime class UserManager: def __init__(self, db_name='users.db'): self.db_name = db_name self.init_db() def init_db(self): """初始化数据库""" with sqlite3.connect(self.db_name) as conn: cursor = conn.cursor() cursor.execute(''' CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, email TEXT UNIQUE, age INTEGER CHECK(age > 0), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ''') conn.commit() def add_user(self, name, email, age): """添加用户""" try: with sqlite3.connect(self.db_name) as conn: cursor = conn.cursor() cursor.execute(''' INSERT INTO users (name, email, age) VALUES (?, ?, ?) ''', (name, email, age)) conn.commit() return cursor.lastrowid except sqlite3.IntegrityError: print(f"邮箱 {email} 已存在!") return None def get_all_users(self): """获取所有用户""" with sqlite3.connect(self.db_name) as conn: conn.row_factory = lambda c, r: dict(zip([col[0] for col in c.description], r)) cursor = conn.cursor() cursor.execute('SELECT * FROM users ORDER BY created_at DESC') return cursor.fetchall() def search_users(self, keyword): """搜索用户""" with sqlite3.connect(self.db_name) as conn: cursor = conn.cursor() cursor.execute(''' SELECT * FROM users WHERE name LIKE ? OR email LIKE ? ''', (f'%{keyword}%', f'%{keyword}%')) return cursor.fetchall() # 使用示例 if __name__ == '__main__': manager = UserManager() # 添加用户 manager.add_user('张三', 'zhangsan@test.com', 25) manager.add_user('李四', 'lisi@test.com', 30) # 查询所有用户 print("=== 所有用户 ===") for user in manager.get_all_users(): print(f"ID: {user['id']}, 姓名: {user['name']}, 邮箱: {user['email']}") # 搜索用户 print("\n=== 搜索结果 ===") results = manager.search_users('张') for user in results: print(user) ``` --- ## 总结 SQLite是Python开发中处理本地数据的绝佳选择: - **简单易学**:标准库内置,API直观 - **功能完整**:支持事务、索引、触发器等高级特性 - **便于部署**:单文件存储,易于备份和迁移 无论是原型开发、小型应用还是作为大型应用的本地缓存,SQLite都能胜任。掌握它,让你的数据操作更加得心应手! --- **参考资源:** - [Python官方文档 - sqlite3模块](https://docs.python.org/3/library/sqlite3.html) - [SQLite官方文档](https://www.sqlite.org/docs.html)
posted @ 2026-03-23 07:35  码小小小仙  阅读(14)  评论(0)    收藏  举报