如果我只在aiomysql中选择,我是否需要提交

时间:2017-02-09 10:07:26

标签: mysql python-3.x transactions

我正在使用aiomysql(https://github.com/aio-libs/aiomysql)并且对未关闭的事务和锁定行有一些问题。我在我的应用程序中使用AIO连接池。 我没有使用SA上下文管理器进行交易。

我的问题:

  1. 如果我只做而且只有SELECT,因为我理解行上没有锁,所以我需要调用wait for conn.commit()或者我可以跳过它,如果我可以跳过MySQL现在应该怎样交易结束了吗?

  2. 在下面的代码中,然后AIO MySQL启动一个新的事务?然后调用gets()连接,然后创建调用的游标,或者我应该明确调用“START TRANSACTION”?

  3. enter image description here

1 个答案:

答案 0 :(得分:0)

您需要确保在没有提交的情况下进行回滚,因此提交必须位于try块内。但是select不需要提交。

如果您的连接上的autocommit为True,则每次插入或更新均被视为单个事务并隐式提交。如果autocommit为False,则您将自动获取事务,并且必须在插入后提交。如果autocommit为false,则无需调用START TRANSACTION。

如果您需要调用START TRANSACTION,请使用此处记录的conn.begin():

https://aiomysql.readthedocs.io/en/latest/connection.html#connection

如果您有多个必须同时成功或回滚的或有更新,则使用MySQL事务。例如,第二次更新失败的银行转帐需要回滚:

  • 从帐户A取钱
  • 在帐户B中存钱

您可以在aiomysql github中找到一个交易示例。

https://github.com/aio-libs/aiomysql/tree/master/examples