Loading...
Loading...
Compare original and translation side by side
pip install PyMySQLpip install PyMySQLundefinedundefinedpymysql.connect()charset='utf8mb4'import pymysql
import pymysql.cursors
connection = pymysql.connect(
host="localhost",
user="app_user",
password="secret",
database="mydb",
charset="utf8mb4",
cursorclass=pymysql.cursors.DictCursor,
connect_timeout=10,
read_timeout=30,
write_timeout=30,
autocommit=False, # explicit transaction control (recommended)
)pymysql.connect()charset='utf8mb4'import pymysql
import pymysql.cursors
connection = pymysql.connect(
host="localhost",
user="app_user",
password="secret",
database="mydb",
charset="utf8mb4",
cursorclass=pymysql.cursors.DictCursor,
connect_timeout=10,
read_timeout=30,
write_timeout=30,
autocommit=False, # 显式事务控制(推荐)
)| Parameter | Default | Notes |
|---|---|---|
| | Always set |
| | Use |
| | Keep |
| | Seconds before connection attempt fails |
| | Set to prevent hung reads |
| | Set to prevent hung writes |
| | Path to CA cert for TLS connections |
| 参数 | 默认值 | 说明 |
|---|---|---|
| | 始终设置为 |
| | 使用 |
| | 保持为 |
| | 连接尝试失败前的等待秒数 |
| | 设置该值以防止读取操作挂起 |
| | 设置该值以防止写入操作挂起 |
| | TLS连接使用的CA证书路径 |
withundefinedwithundefined
> **Note**: Using `with connection:` handles transaction commit/rollback but does **not** close the connection. Call `connection.close()` explicitly or manage it via a pool.
> **注意**:使用`with connection:`会处理事务的提交/回滚,但**不会**关闭连接。请显式调用`connection.close()`或通过连接池管理连接。execute()undefinedexecute()undefined
Use `cursor.mogrify(query, args)` to preview the interpolated query string during debugging.
调试期间,可使用`cursor.mogrify(query, args)`预览插值后的查询字符串。| Cursor Class | Returns | Buffered | Use Case |
|---|---|---|---|
| tuple | Yes | Default; small-to-medium result sets |
| dict | Yes | When column-name access is needed |
| tuple | No | Large result sets; memory-constrained |
| dict | No | Large result sets with dict access |
cursorclassundefined| 游标类 | 返回格式 | 是否缓冲 | 使用场景 |
|---|---|---|---|
| 元组 | 是 | 默认类型;适用于中小型结果集 |
| 字典 | 是 | 需要按列名访问数据时使用 |
| 元组 | 否 | 大型结果集;内存受限场景 |
| 字典 | 否 | 需要字典格式的大型结果集场景 |
cursorclassundefined
For large tables, prefer `SSCursor` and iterate without calling `fetchall()`:
```python
with connection.cursor(pymysql.cursors.SSCursor) as cursor:
cursor.execute("SELECT * FROM large_table")
for row in cursor: # streams row-by-row
process(row)
处理大表时,优先使用`SSCursor`并逐行迭代,避免调用`fetchall()`:
```python
with connection.cursor(pymysql.cursors.SSCursor) as cursor:
cursor.execute("SELECT * FROM large_table")
for row in cursor: # 逐行流式处理
process(row)autocommit=Falsetry:
with connection.cursor() as cursor:
cursor.execute(
"UPDATE accounts SET balance = balance - %s WHERE id = %s",
(amount, from_id),
)
cursor.execute(
"UPDATE accounts SET balance = balance + %s WHERE id = %s",
(amount, to_id),
)
connection.commit()
except Exception:
connection.rollback()
raiseconnection.begin()autocommit=Falsetry:
with connection.cursor() as cursor:
cursor.execute(
"UPDATE accounts SET balance = balance - %s WHERE id = %s",
(amount, from_id),
)
cursor.execute(
"UPDATE accounts SET balance = balance + %s WHERE id = %s",
(amount, to_id),
)
connection.commit()
except Exception:
connection.rollback()
raiseconnection.begin()executemany()executemany()executemany()Cursor.max_stmt_lengthrecords = [
("alice@example.com", "hash1"),
("bob@example.com", "hash2"),
]
with connection.cursor() as cursor:
cursor.execute("TRUNCATE TABLE staging_users")
cursor.executemany(
"INSERT INTO users (email, password_hash) VALUES (%s, %s)",
records,
)
connection.commit()executemany()Cursor.max_stmt_lengthrecords = [
("alice@example.com", "hash1"),
("bob@example.com", "hash2"),
]
with connection.cursor() as cursor:
cursor.execute("TRUNCATE TABLE staging_users")
cursor.executemany(
"INSERT INTO users (email, password_hash) VALUES (%s, %s)",
records,
)
connection.commit()| Method | Returns | Notes |
|---|---|---|
| single row or | Efficient for single-row lookups |
| list of rows | Page through results |
| list of all rows | Avoid on large result sets |
cursor.execute("SELECT id, name FROM users WHERE id = %s", (user_id,))
row = cursor.fetchone()
if row is None:
raise ValueError(f"User {user_id} not found")| 方法 | 返回值 | 说明 |
|---|---|---|
| 单行数据或 | 高效查找单行数据 |
| 行数据列表 | 分页获取结果 |
| 所有行数据列表 | 大型结果集请避免使用 |
cursor.execute("SELECT id, name FROM users WHERE id = %s", (user_id,))
row = cursor.fetchone()
if row is None:
raise ValueError(f"未找到用户 {user_id}")pymysql.errimport pymysql.err
try:
with connection.cursor() as cursor:
cursor.execute(sql, args)
connection.commit()
except pymysql.err.IntegrityError as exc:
connection.rollback()
# duplicate key, foreign key violation, etc.
raise
except pymysql.err.OperationalError as exc:
# connection dropped, timeout, server gone away
raise
except pymysql.err.ProgrammingError as exc:
# bad SQL syntax, wrong number of params
raisepymysql.err.IntegrityErrorpymysql.err.OperationalErrorpymysql.err.ProgrammingErrorpymysql.err.DataErrorpymysql.err.DatabaseErrorpymysql.errimport pymysql.err
try:
with connection.cursor() as cursor:
cursor.execute(sql, args)
connection.commit()
except pymysql.err.IntegrityError as exc:
connection.rollback()
# 重复键、外键约束 violation 等
raise
except pymysql.err.OperationalError as exc:
# 连接断开、超时、服务器不可用
raise
except pymysql.err.ProgrammingError as exc:
# SQL语法错误、参数数量错误
raisepymysql.err.IntegrityErrorpymysql.err.OperationalErrorpymysql.err.ProgrammingErrorpymysql.err.DataErrorpymysql.err.DatabaseErrorconnection.ping(reconnect=True)connection.ping(reconnect=True)
with connection.cursor() as cursor:
cursor.execute(query)connection.ping(reconnect=True)connection.ping(reconnect=True)
with connection.cursor() as cursor:
cursor.execute(query)my.cnfmy.cnfread_default_fileconnection = pymysql.connect(
read_default_file="~/.my.cnf",
read_default_group="client",
database="mydb",
charset="utf8mb4",
cursorclass=pymysql.cursors.DictCursor,
)~/.my.cnf[client]
host = db.internal
user = app_user
password = secretread_default_fileconnection = pymysql.connect(
read_default_file="~/.my.cnf",
read_default_group="client",
database="mydb",
charset="utf8mb4",
cursorclass=pymysql.cursors.DictCursor,
)~/.my.cnf[client]
host = db.internal
user = app_user
password = secretimport pymysql
import pymysql.cursorsimport pymysql
import pymysql.cursorsundefinedundefinedreferences/connection-patterns.mdmy.cnfreferences/cursor-guide.mdmogrifyreferences/connection-patterns.mdmy.cnfreferences/cursor-guide.mdmogrify