news 2026/1/26 12:40:28

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/1/19 0:42:10

价值投资中的新一代生物基塑料技术前景

价值投资中的新一代生物基塑料技术前景关键词&#xff1a;价值投资、新一代生物基塑料技术、前景分析、市场潜力、可持续发展摘要&#xff1a;本文聚焦于价值投资视角下新一代生物基塑料技术的前景。首先介绍了生物基塑料技术的背景&#xff0c;包括目的、预期读者、文档结构和…

作者头像 李华
网站建设 2026/1/25 9:57:31

EmotiVoice适配多种硬件平台,GPU加速更高效

EmotiVoice&#xff1a;让语音合成真正“有情感”且高效落地 在智能语音助手还只会用同一种语调念天气预报的年代&#xff0c;人们很难相信机器能“动情”。而今天&#xff0c;EmotiVoice 正在改变这一现实——它不仅能模仿你的声音&#xff0c;还能用“喜悦”或“悲伤”的语气…

作者头像 李华
网站建设 2026/1/19 15:12:03

提升EmotiVoice合成语音自然度的五种调参技巧

提升EmotiVoice合成语音自然度的五种调参技巧 在虚拟助手越来越“懂人心”、游戏NPC开始流露情绪、有声书朗读逐渐媲美真人演播的今天&#xff0c;用户早已不再满足于“能听清”的语音输出——他们想要的是听得进去、感同身受的声音。这种转变背后&#xff0c;是文本转语音&…

作者头像 李华
网站建设 2026/1/26 1:01:18

16、量子退火、区块链与电子政务:重塑民主治理新格局

量子退火、区块链与电子政务:重塑民主治理新格局 1. 量子退火助力选举建模 在退火过程中,系统先设定为基态,接着绝热演化过程启动。若该过程足够缓慢,系统最终应能提供最优结果,且此终态也为基态。不过,系统存在无法达到基态的可能性。借助玻尔兹曼机(BM)对相关性进行…

作者头像 李华
网站建设 2026/1/18 17:13:06

如何搜索到最新的且有代码的论文(全网独家)

搜索方法&#xff1a; 方法1&#xff1a;问AI给出近两年发表且可复现的论文&#xff08;如增量学习领域&#xff09; 方法2&#xff1a;微信/知乎搜索该领域有代码可复现的论文。 方法3&#xff1a;在谷歌学术上搜索论文关键词&#xff0c;https://scholar.google.com/ 如Inc…

作者头像 李华
网站建设 2026/1/20 11:44:20

Python---实战拒绝加班!3行代码实现Word批量转PDF

摘要&#xff1a;还在一个个打开Word点击“另存为PDF”&#xff1f;本文教你使用Python的 docx2pdf 库&#xff0c;仅需3行代码&#xff0c;即可瞬间完成成百上千个文档的格式转换。无废话&#xff0c;直接上实战。0. 为什么写这篇文章&#xff1f;昨天快下班时&#xff0c;同事…

作者头像 李华