news 2026/7/7 20:18:15

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/7/7 16:02:30

EmotiVoice在语音闹钟中的温柔唤醒功能设计

EmotiVoice在语音闹钟中的温柔唤醒功能设计 在清晨的第一缕光还未照进卧室时&#xff0c;大多数人面对的不是轻柔的苏醒&#xff0c;而是一声突兀刺耳的“叮——”。这种粗暴的唤醒方式不仅容易引发焦虑&#xff0c;还可能扰乱自主神经系统的平稳过渡。有没有一种方式&#xff…

作者头像 李华
网站建设 2026/7/7 14:28:42

EmotiVoice语音合成断点续传功能:大文件生成不中断

EmotiVoice语音合成断点续传功能&#xff1a;大文件生成不中断 在有声书制作、游戏剧情配音或虚拟主播内容生成的场景中&#xff0c;动辄数万字的文本需要合成为连贯音频。然而&#xff0c;现实中的GPU显存波动、网络抖动、服务重启等问题常常导致长时间运行的TTS任务功亏一篑—…

作者头像 李华
网站建设 2026/7/7 9:55:00

AI原生应用领域安全防护的系统设计与优化

AI原生应用领域安全防护的系统设计与优化关键词&#xff1a;AI原生应用、安全防护、数据投毒、对抗攻击、模型安全、系统设计、隐私保护摘要&#xff1a;随着ChatGPT、文心一言等生成式AI的爆发&#xff0c;AI原生应用&#xff08;从诞生就深度依赖AI技术的应用&#xff09;正在…

作者头像 李华
网站建设 2026/7/7 8:42:23

跨越语言藩篱:Pybind11桥接Python与Ascend C算子的工程实践

在昇腾AI算子的生态中&#xff0c;Python与C的边界不是技术障碍而是工程选择。本文将带你深入Pybind11与Ascend C的融合之道&#xff0c;从底层内存对齐到高层API设计&#xff0c;构建一套既保持C性能又享受Python便利的算子调用体系。 目录 前言 一、 跨语言调用的认知升级&…

作者头像 李华
网站建设 2026/7/7 9:21:56

2026毕设ssm+vue基于框架的校园爱心公益平台的设计与实现论文+程序

本系统&#xff08;程序源码&#xff09;带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景 关于高校公益管理信息化的研究&#xff0c;现有成果主要以“线下简单 Excel”或“单一 PC 端系统”为主&#xff0c;专门针对…

作者头像 李华
网站建设 2026/7/7 16:05:30

太贵?爱创猫靠谱省钱

爱创猫APP靠谱吗&#xff1f;实测解析其免费省钱技巧与核心价值在信息爆炸的电商时代&#xff0c;你是否也常被复杂的满减规则、分散的平台价格以及真假难辨的优惠券所困扰&#xff1f;比价耗时耗力&#xff0c;稍不留神就可能“买贵了”。正是在这种普遍的消费痛点下&#xff…

作者头像 李华