使用 Python mysql.connector 成功插入 MySQL 数据后丢失

Posted

技术标签:

【中文标题】使用 Python mysql.connector 成功插入 MySQL 数据后丢失【英文标题】:MySQL data being lost after getting inserted successfully with Python mysql.connector 【发布时间】:2015-07-14 00:19:32 【问题描述】:

我正在使用python mysql.connector 进行一些数据库操作。我的数据库表结构是这样的:

我运行python scriptFaker Package(fake-factory 0.5.0) 来填充这个数据库表。插入后,我运行查询以验证数据是否正确存储到表中。 python脚本显示所有插入的数据并以exit code 0结束

但是当我通过phpMyadmin 探索该表时,它并没有显示那些插入的行。这些插入的数据在下一次运行后不会持续存在。

这是我的代码:

import mysql.connector
from faker import Faker

fake = Faker()

cnx = mysql.connector.connect(user='root', password='001',
                              host='127.0.0.1',
                              database='smf')
cursor = cnx.cursor()

for i in range(1, 5):
    query = "insert into user " + "(userid, name) values("+ str(i) + ", '" + fake.name() + "')"
    cursor.execute(query)

query = "select * from user"
cursor.execute(query)

for (x) in cursor:
    print ("name = " + format(x))

cnx.close()

【问题讨论】:

cursor.execute(query)命令后是否需要cnx.commit() 知道了。需要cnx.commit() 当返回的名称值包含单引号时,会导致 INSERT 查询出错。 (SQL 文本中包含的潜在不安全值必须进行转义。更好的是,使用带有绑定占位符的准备好的语句。) 【参考方案1】:

在调用第一个 cursor.execute(query) 后,您应该有一个 cnx.commitcommit() 函数可以永久保存数据。

【讨论】:

【参考方案2】:

默认情况下Connector/Python 关闭autocommit,并且MySQL 5.5 及更高版本使用事务InnoDB 表,因此有必要使用连接的commit() 方法commit 您的更改。您也可以使用 rollback() 方法进行回滚。

因此,将cnx.commit() 命令放在cursor.execute(query) 之后可以解决您的问题。

【讨论】:

以上是关于使用 Python mysql.connector 成功插入 MySQL 数据后丢失的主要内容,如果未能解决你的问题,请参考以下文章

使用 python 和 mysql.connector 从表中获取数据

使用 Python mysql.connector 成功插入 MySQL 数据后丢失

mysql-connector-python、mysql-connector-python-rf 和 mysql-connector-repackaged 有啥区别?

在 Python 2.7 中使用带有 mysql.connector 的参数化查询

在 mysql-connector-python 中结束连接池

python3使用MySQL connector对MySQL数据库进行操作