事务查询结束时额外 conn.commit() 的目的

问题描述

以下示例 Python 代码对我在 VPC 中创建的 MysqL RDS 实例中的 Employee 表运行 SELECT 查询。该代码在 ExampleDB 数据库中创建一个表,添加示例记录并检索这些记录。这是 AWS documentation

上的邮件代码片段
import sys
import logging
import rds_config
import pyMysqL
#rds settings
rds_host  = "rds-instance-endpoint"
name = rds_config.db_username
password = rds_config.db_password
db_name = rds_config.db_name

logger = logging.getLogger()
logger.setLevel(logging.INFO)

try:
    conn = pyMysqL.connect(rds_host,user=name,passwd=password,db=db_name,connect_timeout=5)
except pyMysqL.MysqLError as e:
    logger.error("ERROR: Unexpected error: Could not connect to MysqL instance.")
    logger.error(e)
    sys.exit()

logger.info("SUCCESS: Connection to RDS MysqL instance succeeded")
def handler(event,context):
    """
    This function fetches content from MysqL RDS instance
    """

    item_count = 0

    with conn.cursor() as cur:
        cur.execute("create table Employee ( EmpID  int NOT NULL,Name varchar(255) NOT NULL,PRIMARY KEY (EmpID))")
        cur.execute('insert into Employee (EmpID,Name) values(1,"Joe")')
        cur.execute('insert into Employee (EmpID,Name) values(2,"Bob")')
        cur.execute('insert into Employee (EmpID,Name) values(3,"Mary")')
        conn.commit()
        cur.execute("select * from Employee")
        for row in cur:
            item_count += 1
            logger.info(row)
            #print(row)
    conn.commit() # <<-------------- why this line needed

    return "Added %d items from RDS MysqL table" %(item_count)

根据我的理解,第一个 conn.commit() 确保我执行的所有更改(例如 1 CREATE 和 3 }} 但我的困惑是最后一个 cursor.commit() 返回前的目的是什么,当我删除那行时它工作正常。如果我在这里遗漏了什么,请澄清。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...