0
我注意到了关于使用python进行MySQL更新的一些文章,但似乎无法得到正确的结果。MySQL更新报告错误,我错过了什么?
def updateEmployee(employee):
print employee["firstName"]+" "+employee["lastName"]+" "+employee["nameN"]
cursor = db.cursor()
if(len(employee["nameN"]) > 0):
cursor.execute("""
UPDATE `employee`
SET `employeeID`=%s, `parentID`=%s, `firstName`=%s, `title`=%s, `locCode`=%s,
(25)
WHERE `employee`.`nameN`=%s
""", (employee["employeeID"], employee["parentID"], employee["firstName"], employee["title"], employee["locCode"], employee["nameN"]))
if(cursor.rowcount > 0):
print "updated"
else:
c.execute("""
INSERT INTO `employee`
(`employeeID`, `parentID`, `nameN`, `firstName`, `alias`, `lastName`, `title`, `department`, `phone`, `areaMission`, `leadershipStyle`, `employeeType`, `coreFunc1`, `coreFunc2`, `coreFunc3`, `address`, `locCode`,`posOrg`)
VALUES
(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
""", (employee["employeeID"], employee["parentID"], employee["nameN"], employee["firstName"], "", employee["lastName"], employee["title"], "", employee["phone"], '', '', '', '', '', '', '', employee["locCode"], ''))
if(c.rowcount > 0):
db.commit()
print "inserted"
else:
print "insert failed"
else:
print "missing nameN"
产生的误差,其在上面的行的前面appaers上线路25(updateEmployee),其用于参考具有(25)。
[[email protected] ~]$ ./adjust.py
Linda Adam adam.804
Traceback (most recent call last):
File "./adjust.py", line 89, in <module>
processCSV(fileName)
File "./adjust.py", line 14, in processCSV
updateEmployee(employee)
File "./adjust.py", line 25, in updateEmployee
WHERE `employee`.`nameN`=%s """, (employee["employeeID"], employee["parentID"], employee["firstName"], employee["title"], employee["locCode"], employee["nameN"]))
File "/usr/lib/python2.5/site-packages/MySQLdb/cursors.py", line 166, in execute
self.errorhandler(self, exc, value)
File "/usr/lib/python2.5/site-packages/MySQLdb/connections.py", line 35, in defaulterrorhandler
raise errorclass, errorvalue
_mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `employee`.`nameN`='adam.804'' at line 3")
看来我结束了一个额外的“在”WHERE子句“,但我不明白这可能是怎么回事?
我使用时,失败的员工对象定义为:
{
'employeeID': '1111',
'firstName': 'Linda',
'title': 'Systems Manager',
'nameN': 'adam.804',
'lastName': 'Adam',
'locCode': 'TNC',
'phone': '555-555-5555',
'parentID': '2222',
'room': ''
}
这似乎解决它,我是否还是不很正确使用ROWCOUNT什么建议吗?基本上我想尝试更新,如果更新失败,我想做一个插入。也许我正在讨论这个错误? – Chris 2010-11-04 16:12:43
嗨克里斯。我没有仔细看过你的查询。如果你想做一个upsert,你应该看看'INSERT ... ON DUPLICATE KEY UPDATE ...':http://dev.mysql.com/doc/refman/5.1/en/insert- on-duplicate.html – 2010-11-04 18:37:46
感谢您的评论,确实有帮助。 – Chris 2010-11-09 15:49:19