🔍 核心概念速览

1. DB-API是什么

Python数据库访问的标准化接口(PEP 249),解决不同数据库适配器的兼容性问题。
✅ 核心价值:一次编写,多库通用,切换数据库只需修改少量代码

2. 核心组成模块

DB-API
模块属性
Connection对象
Cursor对象
类型系统

⚙️ 关键模块属性详解

属性名 类型 说明
apilevel 字符串 兼容的API版本(如’2.0’)
threadsafety 整型 0-3级线程安全(0=无安全,3=全安全)
paramstyle 字符串 参数风格:‘qmark’ ?,‘numeric’ :1,‘format’ %s 等(见表6-2)

🔗 连接与游标操作精要

Connection对象方法

cxn = MySQLdb.connect(user='root', db='test')  # 创建连接
cxn.commit()    # 提交事务 
cxn.rollback()  # 回滚事务 
cxn.close()     # 关闭连接 

Cursor对象核心操作

cur = cxn.cursor()                  # 创建游标
cur.execute("SELECT * FROM users")  # 执行SQL 
rows = cur.fetchall()               # 获取所有结果
for row in cur.fetchmany(size=5):   # 分批获取 
    print(row)
cur.close()  # 关闭游标

🚨 异常处理体系

DB-API定义的异常层级:

StandardError
Warning
Error
InterfaceError
DatabaseError
DataError
OperationalError
IntegrityError

💡 实战技巧:多数据库适配

连接不同数据库的代码对比:

MySQL 
import MySQLdb 
conn = MySQLdb.connect(db='test')
 
PostgreSQL (psycopg2)
import psycopg2 
conn = psycopg2.connect(database='test')
 
SQLite
import sqlite3 
conn = sqlite3.connect('test.db')

参数化查询规范:

安全传参(防SQL注入)
cur.execute("SELECT * FROM users WHERE id=%s", (user_id,))
 
错误示范(直接拼接SQL)
cur.execute(f"SELECT * FROM users WHERE id={user_id}")  # ❌危险!

🛠️ 最佳实践建议

1. 资源管理

使用with语句自动关闭连接:

with sqlite3.connect('test.db') as conn:
    with conn.cursor() as cur:
        cur.execute("...")

2. 类型转换

使用DB-API的类型构造函数:

from datetime import date 
# 插入日期对象 
cur.execute("INSERT INTO events VALUES (?)", (date(2025,9,16),))

3. 性能优化

  • 批量操作使用executemany()
  • 设置arraysize提升fetchmany()效率

技术箴言
“DB-API的价值在于它用20%的规范解决了80%的数据库兼容问题,
让开发者聚焦业务逻辑而非数据库差异。” —— Python DB-SIG


Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐