news 2026/9/15 3:44:10

python_内置sqlite3模块详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python_内置sqlite3模块详解

SQLite 是 Python 内置的轻量级数据库,无需单独的服务器进程,使用文件存储数据。它适合小型应用、原型开发或嵌入式系统,支持标准 SQL 语法。下面详细介绍sqlite3模块的用法和示例。

1. 连接数据库

使用sqlite3.connect()创建数据库连接。如果数据库不存在,会自动创建。

import sqlite3 # 连接到数据库(如果不存在则创建) conn = sqlite3.connect('example.db') # 或使用内存数据库: sqlite3.connect(':memory:') # 创建游标对象执行 SQL 命令 cursor = conn.cursor()

2. 创建表

使用CREATE TABLE语句创建表,需调用conn.commit()提交事务。

# 创建 users 表 cursor.execute(''' CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, age INTEGER, email TEXT UNIQUE ) ''') conn.commit() # 提交事务

3. 插入数据

使用INSERT INTO插入单条或多条记录。

# 插入单条记录 cursor.execute("INSERT INTO users (name, age, email) VALUES (?, ?, ?)", ("Alice", 30, "alice@example.com")) # 插入多条记录(使用 executemany) users_data = [ ("Bob", 25, "bob@example.com"), ("Charlie", 35, "charlie@example.com") ] cursor.executemany("INSERT INTO users (name, age, email) VALUES (?, ?, ?)", users_data) conn.commit() # 提交事务

4. 查询数据

使用SELECT语句查询数据,通过fetchone()fetchall()fetchmany()获取结果。

# 查询所有记录 cursor.execute("SELECT * FROM users") all_users = cursor.fetchall() print("所有用户:", all_users) # 查询单条记录 cursor.execute("SELECT * FROM users WHERE name = ?", ("Alice",)) user = cursor.fetchone() print("Alice:", user) # 使用 fetchmany 获取部分结果 cursor.execute("SELECT * FROM users") some_users = cursor.fetchmany(2) print("前两条记录:", some_users)

5. 更新和删除数据

使用UPDATEDELETE语句修改数据,需提交事务。

# 更新记录 cursor.execute("UPDATE users SET age = ? WHERE name = ?", (31, "Alice")) # 删除记录 cursor.execute("DELETE FROM users WHERE age < ?", (30,)) conn.commit() # 提交事务

6. 参数化查询

使用参数化查询(?占位符)防止 SQL 注入。

# 安全示例:使用参数化查询 name = "Charlie" cursor.execute("SELECT * FROM users WHERE name = ?", (name,)) # 不安全示例(避免这样写) # cursor.execute(f"SELECT * FROM users WHERE name = '{name}'")

7. 事务处理

SQLite 默认使用自动提交模式,可通过conn.commit()conn.rollback()管理事务。

try: # 开始事务 cursor.execute("INSERT INTO users (name, email) VALUES (?, ?)", ("David", "david@example.com")) # 模拟错误 # 1 / 0 # 取消注释此行触发异常 conn.commit() # 提交事务 except Exception as e: print(f"Error: {e}") conn.rollback() # 回滚事务

8. 高级特性

8.1 自定义函数
def multiply(a, b): return a * b conn.create_function("multiply", 2, multiply) cursor.execute("SELECT multiply(3, 4)") print(cursor.fetchone()) # 输出: (12,)
8.2 行对象(Row Objects)
conn.row_factory = sqlite3.Row cursor.execute("SELECT * FROM users") row = cursor.fetchone() print(row["name"], row["age"]) # 通过列名访问数据

9. 关闭连接

操作完成后关闭游标和连接。

cursor.close() conn.close()

完整示例:用户管理系统

下面是一个完整的用户管理系统示例,包含增删改查功能:

import sqlite3 def create_connection(): conn = sqlite3.connect('users.db') conn.row_factory = sqlite3.Row return conn def create_table(): conn = create_connection() with conn: conn.execute(''' CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, email TEXT UNIQUE, age INTEGER ) ''') def add_user(name, email, age): conn = create_connection() with conn: try: conn.execute("INSERT INTO users (name, email, age) VALUES (?, ?, ?)", (name, email, age)) return True except sqlite3.IntegrityError: print(f"Error: Email {email} already exists.") return False def get_all_users(): conn = create_connection() with conn: return conn.execute("SELECT * FROM users").fetchall() def update_user_age(user_id, new_age): conn = create_connection() with conn: conn.execute("UPDATE users SET age = ? WHERE id = ?", (new_age, user_id)) def delete_user(user_id): conn = create_connection() with conn: conn.execute("DELETE FROM users WHERE id = ?", (user_id,)) # 使用示例 if __name__ == "__main__": create_table() add_user("Eve", "eve@example.com", 28) users = get_all_users() for user in users: print(dict(user)) # 打印为字典格式

注意事项

  1. 线程安全:SQLite 支持多线程读,但写入时需加锁(默认模式)。
  2. 事务管理:批量操作时使用事务可显著提高性能。
  3. 大数据处理:SQLite 适合中小型数据集,大数据量建议使用 PostgreSQL 或 MySQL。

通过上述示例,你可以掌握sqlite3模块的基本用法。如需更复杂的功能,可以结合 Python 的其他库(如 Pandas)进行数据处理。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 3:55:23

开发AI Agent的多语言情感分析比较系统

开发AI Agent的多语言情感分析比较系统关键词&#xff1a;AI Agent、多语言情感分析、比较系统、自然语言处理、机器学习摘要&#xff1a;本文旨在深入探讨开发AI Agent的多语言情感分析比较系统。首先介绍了该系统开发的背景&#xff0c;包括目的、预期读者、文档结构和相关术…

作者头像 李华
网站建设 2026/9/14 18:08:30

48、Linux DBMS 管理全攻略

Linux DBMS 管理全攻略 在 Linux 环境下管理数据库管理系统(DBMS),涉及多个关键方面,包括系统管理、性能管理和进程管理等。下面将详细介绍这些方面的相关知识和操作方法。 系统管理 管理 Linux 数据库在很大程度上等同于管理 Linux 系统本身。系统管理主要涵盖以下六个…

作者头像 李华
网站建设 2026/9/15 11:30:53

49、Linux系统管理实用指南(上)

Linux系统管理实用指南(上) 在Linux系统管理中,掌握一系列实用的命令和操作技巧至关重要。本文将详细介绍Linux系统管理中的多个方面,包括进程管理、用户管理、文件系统管理、日志处理、系统关机重启、用户账户管理以及任务调度等内容。 1. 进程管理 在Linux中,有时需要…

作者头像 李华
网站建设 2026/9/15 7:34:45

17、数据库设计:从简单到复杂的实践指南

数据库设计:从简单到复杂的实践指南 在数据库设计领域,规范化的关系数据库具有诸多优势。乍一看,规范化的设计可能比将所有列简单地放入单个表的初始设计更复杂,但随着深入了解,会发现规范化的数据库更易于编程和维护,也更能适应变化。在设计关系时投入的精力,将在数据…

作者头像 李华
网站建设 2026/9/14 3:54:41

EmotiVoice + GPU加速:实现千小时语音批量生成

EmotiVoice GPU加速&#xff1a;实现千小时语音批量生成 在有声书市场年复合增长率超过25%的今天&#xff0c;内容平台正面临一个尖锐矛盾&#xff1a;用户对高质量、个性化语音内容的需求激增&#xff0c;而传统配音生产模式却仍停留在“一人一录”的手工时代。一条10分钟的音…

作者头像 李华
网站建设 2026/9/15 12:10:32

欧姆龙 FINS ⇌ 西门子 S7 智能数据交换网关

Omron & Siemens PLC Data Exchange Smart Gateway点赞评论留言&#xff08;留下邮箱&#xff09;或者私信获取试用版&#x1f4a1; 产品核心价值“打破品牌壁垒&#xff0c;无需编程&#xff0c;一根网线实现欧姆龙与西门子 PLC 的互联互通。” 本软件旨在解决工业现场最常…

作者头像 李华