python - MySQLdb - 何时提交和执行?

标签 python mysql database mysql-python

我在 Python 2 中使用 MySQLdb,我对在数据库中执行查询有疑问。假设我有一些连接 con,我用 cur = con.cursor() 实例化了一个游标。以下哪项是将更改提交到数据库的正确方法?如果您能解释正确答案背后的理论,可加分 :)

方法一:

try:
    cur.execute('command 1')
    con.commit()
    cur.execute('command 2')
    con.commit()
except MySQLdb.Error as e:
    con.rollback()

方法二:

try:
    cur.execute('command 1')
    cur.execute('command 2')
    con.commit()
except MySQLdb.Error as e:
    con.rollback()

方法三:

try:
    cur.execute('command 1')
    try:
        cur.execute('command 2')
    except MySQLdb.Error as e:
        con.rollback()
    con.commit()
except MySQLdb.Error as e:
    con.rollback()

最佳答案

对于 MySQLdb,我可能会这样做:

import contextlib

connection = get_connection_somehow()
with contextlib.closing(connection) as con:
    with con as cursor:
        cursor.execute(query1)
    with con as cursor:
        cursor.execute(query2)
    ...

如果要执行的查询不止一两个,当然可以使用循环。

这里有几点需要注意:

  • 创建连接的成本有点高。
  • 创建游标非常便宜。
  • MySQLdb.Connection 在用作上下文管理器时会为您提供一个新游标。

关于python - MySQLdb - 何时提交和执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38063784/

相关文章:

database - 0 行删除/更新/插入需要 ORACLE 中的 COMMIT?

python - PyPI 索引与简单索引

python - 使用 Image.putalpha() 时,“ImageDraw”对象没有属性 'load'

python - 从 async.subprocess.PIPE 读取

mysql - shell脚本中mysql存储过程的关联数组

database - Dlookup 作为导航子窗体中文本框的控制源

python - Tensorflow 2.0 中已弃用标志,最好的替代方案是什么?

mysql - 编写高效的mysql语句如何以不同的表形式表示

mysql - MySQL中如何选择自增字段?

database - 此警告意味着什么 `Required tables DBMSHP_FUNCTION_INFO,DBMSHP_PARENT_CHILD_INFO,DBMSHP_RUNS missing`