是否可以对多个事务使用单个 MySQLdb 连接而不关闭它们之间的连接?换句话说,是这样的:
conn = MySQLdb.connect(host="1.2.3.4", port=1234, user="root", passwd="x", db="test")
for i in range(10):
try:
cur = conn.cursor()
query = "DELETE FROM SomeTable WHERE ID = %d" % i
cur.execute(query)
cur.close()
conn.commit()
except Exception:
conn.rollback()
conn.close()
似乎工作正常,但我只是想仔细检查一下。
我认为这里对交易的构成存在误解。
您的示例打开一个连接,然后执行one其上进行交易。您在该事务中执行多个 SQL 语句,但在提交后完全关闭它。当然,这再好不过了。
执行多个交易(而不只是 SQL 语句),看起来像这样:
conn = MySQLdb.connect(host="1.2.3.4", port=1234, user="root", passwd="x", db="test")
for j in range(10):
try:
for i in range(10):
cur = conn.cursor()
query = "DELETE FROM SomeTable WHERE ID = %d" % i
cur.execute(query)
cur.close()
conn.commit()
except Exception:
conn.rollback()
conn.close()
上面的代码提交了 10 个事务,每个事务包含 10 个单独的删除语句。
是的,只要您不在线程之间共享该连接,您应该能够毫无问题地重复使用打开的连接。
例如,SQL炼金术 http://www.sqlalchemy.org/通过池化连接来重用连接,根据需要向应用程序分发打开的连接。新事务和新语句在应用程序的整个生命周期中在这些连接上执行,无需在应用程序关闭之前关闭。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)