使用 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 script
和Faker 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.commit
。 commit()
函数可以永久保存数据。
【讨论】:
【参考方案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 的参数化查询