Python基础教程(八十七)访问数据库之SQLite:指尖上的数据库,深度解析Python与SQLite的零配置高效协作(附实战代码)

一、SQLite核心优势:轻量嵌入,即开即用

相较于MySQL/PostgreSQL等数据库,SQLite的核心差异如下:

特性

SQLite

传统数据库

架构

嵌入式,无独立服务器

客户端-服务器模式

部署

零配置,单文件存储

需安装配置服务

并发写入

库级锁,适合低并发场景

行级/表级锁,高并发

适用场景

移动端、桌面应用、小型Web

高并发Web、企业应用

二、Python操作SQLite全流程详解

1. 基础操作四步法
import sqlite3

# 1. 连接数据库(自动创建)
conn = sqlite3.connect('user_db.db')  

# 2. 创建游标
cursor = conn.cursor()  

# 3. 执行SQL(创建用户表)
cursor.execute('''CREATE TABLE IF NOT EXISTS users (
                id INTEGER PRIMARY KEY,
                name TEXT NOT NULL,
                email TEXT UNIQUE,
                created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)''')

# 4. 提交并关闭
conn.commit()  
conn.close()  
2. 高效CRUD与防注入
# 安全插入(参数化查询)
new_user = ('李雷', 'lilei@example.com')
cursor.execute("INSERT INTO users (name, email) VALUES (?, ?)", new_user)

# 批量插入加速
users_data = [('韩梅梅', 'hanmeimei@test.com'), ('小明', 'xiaoming@data.org')]
cursor.executemany("INSERT INTO users (name, email) VALUES (?, ?)", users_data)

# 查询与结果遍历
cursor.execute("SELECT * FROM users WHERE email LIKE ?", ('%@test.com',))
for row in cursor.fetchall():
    print(f"ID:{row[0]}, 姓名:{row[1]}, 邮箱:{row[2]}")

三、进阶实战技巧

1. 内存数据库:极速测试
mem_conn = sqlite3.connect(':memory:')  # 内存中运行
2. 连接池管理(提升Web性能)
import sqlite3
from contextlib import closing

def get_user(user_id):
    with closing(sqlite3.connect('app.db')) as conn:  # 自动关闭连接
        cursor = conn.cursor()
        cursor.execute("SELECT name FROM users WHERE id=?", (user_id,))
        return cursor.fetchone()[0]
3. JSON扩展支持(v3.38+)
# 启用JSON1扩展
conn = sqlite3.connect('data.db')
conn.enable_load_extension(True)
conn.load_extension("./sqlite3-json.so")  # 加载扩展

# 直接查询JSON字段
cursor.execute("SELECT json_extract(profile, '$.age') FROM users")

四、完整示例:用户管理系统

import sqlite3
from datetime import datetime

def init_db():
    conn = sqlite3.connect('user_system.db')
    cursor = conn.cursor()
    cursor.execute('''CREATE TABLE IF NOT EXISTS users (
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    username TEXT UNIQUE NOT NULL,
                    password_hash TEXT NOT NULL,
                    last_login TIMESTAMP)''')
    conn.commit()
    return conn

def add_user(conn, username, password):
    try:
        cursor = conn.cursor()
        cursor.execute("INSERT INTO users (username, password_hash) VALUES (?, ?)", 
                      (username, password))
        conn.commit()
        print(f"用户 {username} 创建成功!")
    except sqlite3.IntegrityError:
        print("错误:用户名已存在!")

# 调用示例
db_conn = init_db()
add_user(db_conn, "tech_writer", "secure_hash_123")
db_conn.close()

最佳实践建议

  • 生产环境启用conn.execute("PRAGMA journal_mode=WAL;")提升并发
  • 使用WITH conn: 自动提交事务(Python 3.11+)
  • 敏感操作使用预编译语句防御SQL注入

结语:SQLite凭借其零配置、单文件、全功能SQL的特性,在Python生态中持续占据轻量级存储方案的首选位置。掌握其核心操作与进阶技巧,可为快速原型开发、嵌入式系统及中小应用提供高效可靠的数据持久层支撑。当遇到需要高并发写或分布式场景时,可平滑迁移至服务端数据库。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值