gpt4 book ai didi

python - 需要帮助诊断 Python/MySQL 插入/更新异常

转载 作者:太空宇宙 更新时间:2023-11-03 11:03:49 27 4
gpt4 key购买 nike

我正在学习使用从 mysql.org 网站下载的 MySQL Connector/Python 库访问 MySQL 数据库。我的环境是 OS X 10.6、Eclipse Indigo 和 PyDev,以及新安装的 MySql(5.5.28,64 位)版本、Sequel Pro 和 phpMyAdmin。

我的测试数据库有一个表“Employees”,其中包含列“id”、“name”和“ssn”。最初,有两行:(1, Lucy, 1234) 和 (2, Alex, 3456)。

这是 Python 脚本。变量“config”包含数据库的有效访问信息。

import mysql.connector
from mysql.connector import errorcode

config = {…}

try:
cnx = mysql.connector.connect(**config)
except mysql.connector.Error as err:
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
print("Something is wrong your username or password")
elif err.errno == errorcode.ER_BAD_DB_ERROR:
print("Database does not exist")
else:
print(err)
else:
print ("original database contents")

cursor = cnx.cursor()
query = ("SELECT name, ssn FROM Employees") # fetches all employees names and ssns
cursor.execute(query)
for (name, ssn) in cursor: # iterates over fetched data
print(name, ssn) # print one employee per line
cursor.close;

# block 1: insert a new employee into row 3
cursor = cnx.cursor()
cursor.execute("INSERT INTO Employees (id, name, ssn) VALUES (3, 'Sam', '5678')")
cnx.commit()
cursor.close()

# block 2: update the name in the first row
cursor = cnx.cursor()
cursor.execute("UPDATE Employees SET name='Ethel' WHERE id=1")
cnx.commit;
cursor.close()

print ("after inserting Sam and updating Lucy to Ethel")

cursor = cnx.cursor()
query = ("SELECT name, ssn FROM Employees") # fetches all employees' names and ssns
cursor.execute(query)
for (name, ssn) in cursor: # iterates over fetched data
print(name, ssn) # print one employee per line
cursor.close;

cnx.close()

print ("end of database test")

使用插入在初始数据库上运行 Python 脚本,然后更新产量:

original database contents
(u'Lucy', u'1234')
(u'Alex', u'3456')
after inserting Sam and updating Lucy to Ethel
(u'Ethel', u'1234')
(u'Alex', u'3456')
(u'Sam', u'5678')
end of database test

使用 phpMyAdmin 或 Sequel Pro 查看数据库仍然显示“Lucy”作为第 1 行中的名称。

在带有更新的初始数据库上运行 Python 脚本,然后插入(颠倒脚本中 block 1 和 block 2 的顺序)产生:

original database contents
(u'Lucy', u'1234')
(u'Alex', u'3456')
after inserting Sam and updating Lucy to Ethel
(u'Ethel', u'1234')
(u'Alex', u'3456')
(u'Sam', u'5678')
end of database test

使用 phpMyAdmin 或 Sequel Pro 查看数据库现在显示“Ethel”作为第 1 行中的名称。

从在 Sequel Pro 中打开的初始数据库开始,我可以按任一顺序执行两个查询并获得正确的结果。

似乎与提交数据库更改有关的某些事情出错了,但作为新手,我没有看到它。如果能帮助诊断此问题,我将不胜感激。

最佳答案

您需要调用 commit 方法将您的更改提交到数据库,否则永远不会保存事务,其他连接也看不到更改。

cnx.commit()

您在代码中省略了 () 括号。

您还在多个位置引用了 cursor.close 方法,但没有调用它;没什么大不了的,因为 Python 会通过垃圾收集自动清理它们。

关于python - 需要帮助诊断 Python/MySQL 插入/更新异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13497984/

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