它是怎么运用的多笔交易,但不关闭它们之间的连接的单一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()
看来工作不错,但我只是想仔细检查。
我认为这是一个什么构成这里交易的误解。
你举的例子打开了一个连接,然后在其上执行一个事务。 您在事务中执行多个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个DELETE语句。
是的,你应该能够重新使用的开放连接没有问题,只要你不共享线程之间的连接。
例如, SQLAlchemy的汇集它们,根据需要向应用分发打开的连接重新使用的连接。 新的交易和新的语句在整个应用程序的生命周期这些连接执行,而不需要被关闭,直到应用程序被关闭。
这将是最好先建立一个查询字符串,然后执行该单一MySQL的声明。 例如:
query = "DELETE FROM table_name WHERE id IN ("
for i in range(10):
query = query + "'" + str(i) + "', "
query = query[:-2] + ')'
cur = conn.cursor()
cur.execute(query)