Python3 MySQL(mysql-connector)
Python3 学习笔记 · 整理自菜鸟教程
一句话
mysql-connector-python 是 MySQL 官方提供的纯 Python 驱动,安装后用 mysql.connector 连接 MySQL 并执行增删改查。
要点
- 安装:
pip install mysql-connector-python(官方驱动,纯 Python 实现)。 - 用
mysql.connector.connect()建立连接,参数:host、user、passwd、database。 cursor()创建游标,用cursor.execute(sql)执行语句。- 增删改必须
conn.commit()才会真正写入数据库;查询不需要。 - 占位符用
%s,不要用 f-string 拼 SQL(防注入)。 - 用完记得
cursor.close()和conn.close();用with或 try/finally 保证释放。
语法 / 常用方法
| 语法/方法 | 说明 | 示例 |
|---|---|---|
mysql.connector.connect(...) |
建立数据库连接 | conn = mysql.connector.connect(host='localhost', user='root', passwd='123456', database='test') |
conn.cursor() |
创建游标对象 | cur = conn.cursor() |
cur.execute(sql, params) |
执行单条 SQL,params 为元组/字典 | cur.execute("INSERT INTO t VALUES(%s,%s)", (1, 'a')) |
cur.executemany(sql, list) |
批量执行(参数为列表套元组) | cur.executemany(sql, [(1,'a'),(2,'b')]) |
cur.fetchone() |
取下一行(元组) | row = cur.fetchone() |
cur.fetchall() |
取所有行(元组列表) | rows = cur.fetchall() |
cur.rowcount |
受影响行数(DML 用) | print(cur.rowcount) |
cur.lastrowid |
最后插入的自增 ID | new_id = cur.lastrowid |
conn.commit() |
提交事务(写操作后必须调用) | conn.commit() |
conn.rollback() |
回滚事务 | conn.rollback() |
cur.close() / conn.close() |
关闭游标和连接 | finally: conn.close() |
conn.cursor(dictionary=True) |
查询结果以字典返回 | cur = conn.cursor(dictionary=True) |
代码示例
1 | |
易错点
- 忘写
conn.commit():数据看起来”没插入”,这是最常见问题。 - 用字符串拼接 SQL(如
f"WHERE name='{name}'")有 SQL 注入风险,一律用%s占位符。 - 占位符是
%s,不是 MySQL 的?(那是很多其他驱动的写法)。 fetchone()没有数据时返回None,要先判空再取值。- 参数化查询时参数必须是元组或列表,单个参数写
(value,)不要漏逗号。 - 连接参数写错(如密码、库名)会抛异常,建议包在 try/except 里并回滚。