2010-11-04 3 views
0

J'ai remarqué quelques messages sur SO concernant les mises à jour de MySQL en utilisant python et je n'arrive toujours pas à le comprendre correctement.Mise à jour de MySQL signale une erreur, Qu'est-ce que je manque?

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" 

résultant d'erreur qui appaers à la ligne 25 (updateEmployee) qui a pour référence (25) en face de la ligne au-dessus.

[[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") 

Il semble Je termine avec un supplément »à la « clause WHERE », mais je ne comprends pas comment cela pourrait être?

L'objet employé J'utilise quand cela échoue est défini comme:

{ 
    'employeeID': '1111', 
    'firstName': 'Linda', 
    'title': 'Systems Manager', 
    'nameN': 'adam.804', 
    'lastName': 'Adam', 
    'locCode': 'TNC', 
    'phone': '555-555-5555', 
    'parentID': '2222', 
    'room': '' 
} 

Répondre

1

Je pense que vous avez une virgule supplémentaire avant votre clause WHERE.

Une mise à jour devrait ressembler à ceci:

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

Je pense que le vôtre ressemble à ceci:

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

Cela ne semble le fixer, toute suggestion sur je suis ou non correctement avec rowcount? Fondamentalement, je veux essayer de mettre à jour, si la mise à jour échoue, je veux faire un insert. Peut-être que je vais à propos de ce tort? – Chris

+0

Bonjour Chris. Je n'ai pas regardé d'aussi près votre requête avant. Si vous essayez de faire un upsert, vous devriez jeter un oeil à 'INSERT ... SUR DUPLICATE KEY UPDATE ...': http://dev.mysql.com/doc/refman/5.1/en/insert- on-duplicate.html –

+0

Merci pour le commentaire, utile en effet. – Chris