2010-11-04 84 views
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': '' 
} 

回答

1

我认为你有多余的逗号您的WHERE子句之前。

的更新应该是这样的:

update foo 
set a = 1, 
b = 2 
where type = 0 

我觉得你是这样的:

update foo 
set a = 1, 
b = 2, 
where type = 0 
+0

这似乎解决它,我是否还是不很正确使用ROWCOUNT什么建议吗?基本上我想尝试更新,如果更新失败,我想做一个插入。也许我正在讨论这个错误? – Chris 2010-11-04 16:12:43

+0

嗨克里斯。我没有仔细看过你的查询。如果你想做一个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

+0

感谢您的评论,确实有帮助。 – Chris 2010-11-09 15:49:19