Python数据库操作关键在于理清装驱动、建连接、拿游标、执行SQL、处理结果、关资源六步;需选对驱动、参数化防注入、及时提交与关闭。

用Python连接数据库做查询和读写,关键不是选哪个库,而是理清步骤:装驱动、建连接、拿游标、执行SQL、处理结果、关资源。不同数据库细节有差异,但主干逻辑一致。
选对驱动,安装基础依赖
Python本身不带数据库驱动,得按实际用的数据库装对应包:
- MySQL → 安装 mysql-connector-python 或 PyMySQL(纯Python,无需C环境)
- PostgreSQL → 安装 psycopg2(推荐)或 pg8000(纯Python)
- SQLite → 无需额外安装,Python标准库自带 sqlite3
- SQL Server → 用 pyodbc 或 pymssql
例如装 PyMySQL:pip install PyMySQL
建立连接并安全管理资源
连接对象(connection)和游标对象(cursor)都要及时关闭,推荐用 with 语句自动释放:
立即学习“Python免费学习笔记(深入)”;
import pymysqlconfig = { 'host': 'localhost', 'user': 'root', 'password': '123456', 'database': 'testdb', 'charset': 'utf8mb4' }
with 确保 connection 和 cursor 自动关闭
with pymysql.connect(*config) as conn: with conn.cursor() as cursor: cursor.execute("SELECT FROM users WHERE age > %s", (18,)) results = cursor.fetchall() for row in results: print(row)
注意:参数必须用元组或列表传入(如 (18,)),避免字符串拼接,防止SQL注入。
执行查询、插入、更新、删除操作
所有操作都通过 cursor.execute(),区别只在SQL语句类型和是否需要提交:
- 查询(SELECT):用 fetchone()、fetchall() 或 fetchmany(n) 取结果
- 插入/更新/删除:执行后需调用 conn.commit() 才真正生效;出错时可用 conn.rollback()
示例插入一条记录:
with pymysql.connect(**config) as conn:
with conn.cursor() as cursor:
sql = "INSERT INTO users (name, age) VALUES (%s, %s)"
cursor.execute(sql, ("张三", 25))
conn.commit() # 必须提交
处理常见问题与实用建议
实际写代码常遇到几个坑,提前注意能省不少调试时间:
- 中文乱码?确保连接时指定 charset='utf8mb4',且数据库表字符集也是 utf8mb4
- 连接被拒绝?检查 host、port、用户名密码,确认数据库服务已启动,远程访问权限已开
- 查询结果是元组?可以用 cursor = conn.cursor(pymysql.cursors.DictCursor) 改成字典格式,字段名当key更易读
- 频繁操作?考虑用连接池(如 DBUtils.PooledDB),避免反复创建连接开销
基本上就这些。不复杂但容易忽略细节,把连接、参数化、提交、关闭这四步走稳,90% 的数据库读写需求都能可靠实现。










