Python SQLite数据库:轻量级数据存储解决方案

发布于:2025-09-10 ⋅ 阅读:(15) ⋅ 点赞:(0)

SQLite是一款轻量级、零配置的开源嵌入式关系型数据库,以其单一文件存储、高性能和强可靠性著称。Python通过内置的sqlite3模块提供了对SQLite数据库的完整支持,使其成为Python开发者处理本地数据存储的理想选择。

核心特点

1、嵌入式架构:无需单独服务器进程,直接嵌入到应用程序中。

2、单一文件存储:整个数据库存储在单个磁盘文件中,便于迁移和备份。

3、零配置:无需安装或管理,开箱即用。

4、跨平台兼容:支持Windows、Linux、macOS等主流操作系统。

5、ACID事务:保证数据操作的原子性、一致性、隔离性和持久性。

Python使用SQLite

1. 连接数据库

import sqlite3

# 连接数据库(如果不存在则创建)
conn = sqlite3.connect('example.db')

# 创建游标对象
cursor = conn.cursor()

# 执行SQL语句
cursor.execute('''CREATE TABLE IF NOT EXISTS users
                  (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)''')

# 提交更改
conn.commit()

# 关闭连接
conn.close()

2. 插入数据

def insert_user(name, age):
    conn = sqlite3.connect('example.db')
    cursor = conn.cursor()
    
    # 使用参数化查询防止SQL注入
    cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", (name, age))
    
    conn.commit()
    conn.close()

# 插入多条数据
users = [('Alice', 25), ('Bob', 30), ('Charlie', 35)]
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
cursor.executemany("INSERT INTO users (name, age) VALUES (?, ?)", users)
conn.commit()
conn.close()

3. 查询数据

def get_all_users():
    conn = sqlite3.connect('example.db')
    cursor = conn.cursor()
    
    cursor.execute("SELECT * FROM users")
    rows = cursor.fetchall()
    
    conn.close()
    return rows

def get_user_by_name(name):
    conn = sqlite3.connect('example.db')
    cursor = conn.cursor()
    
    cursor.execute("SELECT * FROM users WHERE name=?", (name,))
    user = cursor.fetchone()
    
    conn.close()
    return user

4. 更新和删除数据

def update_user_age(name, new_age):
    conn = sqlite3.connect('example.db')
    cursor = conn.cursor()
    
    cursor.execute("UPDATE users SET age=? WHERE name=?", (new_age, name))
    conn.commit()
    conn.close()

def delete_user(name):
    conn = sqlite3.connect('example.db')
    cursor = conn.cursor()
    
    cursor.execute("DELETE FROM users WHERE name=?", (name,))
    conn.commit()
    conn.close()

功能示例

1. 使用事务

def transfer_funds(from_id, to_id, amount):
    conn = sqlite3.connect('bank.db')
    cursor = conn.cursor()
    
    try:
        # 开始事务
        cursor.execute("BEGIN TRANSACTION")
        
        # 扣除转出账户金额
        cursor.execute("UPDATE accounts SET balance = balance - ? WHERE id = ?", (amount, from_id))
        
        # 增加转入账户金额
        cursor.execute("UPDATE accounts SET balance = balance + ? WHERE id = ?", (amount, to_id))
        
        # 提交事务
        conn.commit()
        print("转账成功")
    except sqlite3.Error as e:
        # 发生错误时回滚
        conn.rollback()
        print(f"转账失败: {e}")
    finally:
        conn.close()

2. 使用上下文管理器

from contextlib import closing

def get_user_count():
    with closing(sqlite3.connect('example.db')) as conn:
        cursor = conn.cursor()
        cursor.execute("SELECT COUNT(*) FROM users")
        count = cursor.fetchone()
    return count

3. 使用Row工厂获取字典式结果

conn = sqlite3.connect('example.db')
conn.row_factory = sqlite3.Row  # 设置行工厂

cursor = conn.cursor()
cursor.execute("SELECT * FROM users WHERE age > ?", (30,))

for row in cursor:
    print(f"ID: {row['id']}, Name: {row['name']}, Age: {row['age']}")

conn.close()

性能优化

1、批量操作:使用  executemany() 进行批量插入。

2、合理使用索引:为常用查询字段创建索引。

3、PRAGMA设置:调整SQLite的PRAGMA参数优化性能。

4、定期维护:使用VACUUM命令回收未使用空间。

5、WAL模式:对于高并发读场景,使用 PRAGMA journal_mode=WAL 。

# 性能优化示例
conn = sqlite3.connect('example.db')
cursor = conn.cursor()

# 设置WAL模式提高并发读取性能
cursor.execute("PRAGMA journal_mode=WAL")

# 为常用查询字段创建索引
cursor.execute("CREATE INDEX IF NOT EXISTS idx_user_age ON users(age)")

conn.commit()
conn.close()

适用场景

适用场景

  • 移动应用和嵌入式系统

  • 桌面应用程序

  • 小型到中型网站

  • 开发和测试环境

  • 数据分析和缓存

局限性

  • 不适合高并发写入场景

  • 缺乏网络接口,不适合客户端-服务器架构

  • 用户权限管理功能有限

SQLite与Python的结合为开发者提供了一个简单而强大的本地数据存储解决方案。内置的sqlite3模块提供了强大而便捷的数据库操作能力,使得SQLite成为开发中小型应用的理想选择。通过合理使用其特性,可以在各种应用场景中实现高效、可靠的数据管理。理解其优势和局限,合理运用在各种场景中,将极大提升开发效率和应用程序质量。


网站公告

今日签到

点亮在社区的每一天
去签到