MySQL Python中未显示插入的记录

MySQL Python中未显示插入的记录

MySQL Python编程中,有时会碰到插入记录后未能显示的情况,这给程序员带来很多的困扰。在本文中,我们将介绍这个问题的解决方法。

阅读更多:MySQL 教程

问题描述

假设我们有一张名为students的表格,其结构如下:

CREATE TABLE students(
   id INT PRIMARY KEY AUTO_INCREMENT,
   name VARCHAR(50),
   age INT
);
Mysql

当我们向这张表格中插入一条记录时,可以使用类似以下的代码:

import mysql.connector
from mysql.connector import errorcode

cnx = mysql.connector.connect(user='root', password='123456',
                              host='localhost',
                              database='test')

cursor = cnx.cursor()

add_student = ("INSERT INTO students (name, age) VALUES (%s, %s)")
data_student = ('Tom', 20)
cursor.execute(add_student, data_student)

cnx.commit()

cursor.close()
cnx.close()
Python

这段代码首先连接到名为test的数据库,向students表格中插入一条nameTomage20的记录。然后提交事务并关闭连接。

然而,当我们查询students表格时,却发现这条记录没有被插入。这是为什么呢?

解决方案

这个问题的根源在于MySQL Python默认情况下使用事务。在事务中,所有的MySQL命令都被存在了一个缓存中,只有在事务提交时才会将这些命令真正的执行。如果在提交事务之前关闭了连接,那么这些命令就会被自动撤销。

解决这个问题的方法就是禁止事务。我们有以下两种方法:

方法1:禁止事务支持

这种方法比较简单直接,我们只需要在连接MySQL时添加一个参数autocommit,将其设置为True即可禁用事务支持。

cnx = mysql.connector.connect(user='root', password='123456',
                              host='localhost',
                              database='test',
                              autocommit=True)
Python

这样整段程序中的所有MySQL命令都将实时执行,因此插入的记录会被立即提交。

方法2:手动管理事务

在某些情况下,我们可能需要使用到事务支持。此时我们需要手动管理事务,在提交事务之前确保所有的MySQL命令都已经执行完毕。

import mysql.connector
from mysql.connector import errorcode

cnx = mysql.connector.connect(user='root', password='123456',
                              host='localhost',
                              database='test')

cursor = cnx.cursor()

add_student = ("INSERT INTO students (name, age) VALUES (%s, %s)")
data_student = ('Tom', 20)

try:
    cursor.execute("START TRANSACTION")
    cursor.execute(add_student, data_student)
    cursor.execute("COMMIT")

except mysql.connector.Error as error:
    print("Failed to insert record into students table {}".format(error))
    cnx.rollback()

cursor.close()
cnx.close()
Python

在这个例子中,我们使用了MySQL命令START TRANSACTION开启事务,并使用COMMIT命令提交事务。如果执行过程中出错,我们则使用ROLLBACK命令来撤销整个事务。

总结

在MySQL Python中,如果出现插入的记录未能显示的情况,可能是因为使用了事务支持,我们可以通过禁用事务或者手动管理事务来解决这个问题。这是开发过程中需要注意的一个问题。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册