news 2026/4/16 15:04:36

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/4/14 13:28:16

知识演化推理中动态图Transformer的创新设计

知识演化推理中动态图Transformer的创新设计 关键词:知识演化推理、动态图、Transformer、创新设计、图神经网络 摘要:本文聚焦于知识演化推理中动态图Transformer的创新设计。首先介绍了知识演化推理及动态图的背景,阐述了研究的目的、范围和预期读者。接着详细讲解了核心概…

作者头像 李华
网站建设 2026/4/16 12:23:08

51、Linux系统安全与灾难恢复全解析

Linux系统安全与灾难恢复全解析 1. MySQL执行能力 MySQL在性能方面表现出色,在特定的奔腾II 400 MHz PC上,它能够在0.32秒内执行1,000,000+个表达式。这一数据展示了MySQL在处理大量表达式时的高效性,为后续的系统操作提供了坚实的基础。 2. 操作系统审计程序 在Linux系…

作者头像 李华
网站建设 2026/4/9 7:04:48

EmotiVoice情感强度调节技巧:让语音更贴合情境

EmotiVoice情感强度调节技巧&#xff1a;让语音更贴合情境 在虚拟助手轻声提醒你“该休息了”的温柔语调中&#xff0c;在游戏NPC怒吼“绝不饶恕&#xff01;”的激烈对白里&#xff0c;甚至在AI主播讲述新闻时微妙的情绪起伏间——我们正悄然步入一个人机语音不再冰冷、而是能…

作者头像 李华
网站建设 2026/4/11 19:37:31

数据要素生态指数:重点城市发展能力评估报告(2025版)

2025年11月27日&#xff0c;以“数字跃升&#xff1a;从要素流通到智能涌现”为主题的2025智慧中国年会主论坛在北京圆满落幕。本届论坛由智慧中国年会组委会与国脉互联共同主办&#xff0c;吸引了来自国家部委、权威学术机构、多地数据主管部门及行业领军企业的500余位现场代表…

作者头像 李华
网站建设 2026/4/16 12:26:06

ClickHouse分布式表原理:大数据分片存储与查询

ClickHouse分布式表原理深度解析&#xff1a;大数据分片存储与查询的底层逻辑 一、引言&#xff1a;为什么需要分布式表&#xff1f; 1.1 大数据时代的存储与查询痛点 假设你是一家电商公司的大数据工程师&#xff0c;负责处理每天10亿条用户行为数据&#xff08;点击、收藏…

作者头像 李华