TypechoJoeTheme

至尊技术网

统计
登录
用户名
密码

Python操作SQLite轻量数据库完全指南:从入门到实战

2025-07-22
/
0 评论
/
4 阅读
/
正在检测是否收录...
07/22

Python操作SQLite轻量数据库完全指南:从入门到实战

关键词:Python SQLite、轻量数据库、数据库操作、SQLite3教程、嵌入式数据库
描述:本文详细介绍如何使用Python标准库sqlite3操作SQLite数据库,包含连接管理、CRUD操作、事务处理等实战技巧,适合快速开发轻量级应用。


一、为什么选择SQLite?

在开发小型应用或需要嵌入式数据库的场景时,SQLite以其零配置、无服务器、单文件存储的特性成为首选。作为Python内置支持的数据库(通过sqlite3模块),它免去了安装额外服务的麻烦,特别适合:

  • 移动端应用
  • 桌面软件
  • 原型开发
  • 中小流量网站

python
import sqlite3

内存数据库示例(临时测试用)

conn = sqlite3.connect(':memory:')

二、核心操作全解析

1. 数据库连接管理

建议使用上下文管理器自动处理连接,避免资源泄漏:

python with sqlite3.connect('mydb.db') as conn: cursor = conn.cursor() # 执行操作... conn.commit() # 自动提交在退出上下文时发生

2. 表创建与数据类型

SQLite支持动态类型,但建议明确字段类型:

python CREATE_TABLE_SQL = """ CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER CHECK(age >= 0), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP )""" cursor.execute(CREATE_TABLE_SQL)

注意:SQLite没有布尔类型,通常用0/1表示

3. CRUD实战技巧

插入数据(防注入写法)
python data = ('张三', 25) cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", data)

批量插入
python users = [('李四', 30), ('王五', 28)] cursor.executemany("INSERT INTO users (name, age) VALUES (?, ?)", users)

查询与结果处理:python

获取字典形式的结果(替代默认元组)

conn.row_factory = sqlite3.Row
cursor.execute("SELECT * FROM users WHERE age > ?", (20,))
for row in cursor:
print(row['name'], row['age']) # 支持列名访问

4. 事务控制

原子操作示例:

python try: cursor.execute("UPDATE accounts SET balance = balance - 100 WHERE id=1") cursor.execute("UPDATE accounts SET balance = balance + 100 WHERE id=2") conn.commit() except sqlite3.Error: conn.rollback()

三、高级技巧

1. 自定义聚合函数

实现统计连续登录天数:

python
class MaxConsecutiveDays:
def init(self):
self.count = 0
self.max = 0

def step(self, value):
    if value == 1:  # 1表示当日登录
        self.count += 1
        self.max = max(self.max, self.count)
    else:
        self.count = 0

def finalize(self):
    return self.max

conn.createaggregate("maxconsecutive", 1, MaxConsecutiveDays)

2. 数据库加密

使用sqlcipher扩展:

python

需要安装pysqlcipher3

from pysqlcipher3 import dbapi2 as sqlite
conn = sqlite.connect('encrypted.db')
conn.execute("PRAGMA key='secret-key'")

四、性能优化建议

  1. 批量操作:用executemany替代循环单条插入
  2. 预编译语句:重复使用的SQL应参数化
  3. 合理使用索引
    sql CREATE INDEX idx_users_age ON users(age);
  4. WAL模式:提高并发性
    python conn.execute("PRAGMA journal_mode=WAL")

五、常见问题排查

  • 锁冲突:检查是否及时提交事务
  • 性能瓶颈:使用EXPLAIN QUERY PLAN分析SQL
  • 中文乱码:确保连接时指定编码
    python conn = sqlite3.connect('mydb.db', detect_types=sqlite3.PARSE_DECLTYPES)
朗读
赞(0)
版权属于:

至尊技术网

本文链接:

https://www.zzwws.cn/archives/33488/(转载时请注明本文出处及文章链接)

评论 (0)