gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:04:51 26 4
gpt4 key购买 nike

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

我的问题:

  1. 如果我只执行 SELECT,据我所知,行上没有锁,那么我是否需要调用 wait for conn.commit() 或者我可以跳过它,如果我可以跳过 MySQL 现在应该如何交易结束?

  2. 在下面的代码中,然后AIO MySQL开始一个新的事务?然后调用 acquire() 连接或创建游标调用,或者我应该显式调用“START TRANSACTION”?

enter image description here

最佳答案

提交需要在 try block 内,因为您希望确保在没有提交时回滚。然而,选择不需要提交。

如果您的连接上的自动提交为真,则每次插入或更新都被视为单个事务并隐式提交。如果 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

关于mysql - 如果我只在 aiomysql 中选择,我是否需要提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42133681/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com