2017-01-21 5 views
2

Ich möchte mehrere Zeilen mit einer einzigen Abfrage in Python aktualisieren. Ich benutze executemany basiert auf der folgenden example aber ich habe diesen Fehler:Wie soll der Operand 1 Spalte (n) für die Aktualisierung mehrerer Zeilen in Python enthalten?

Operand should contain 1 column(s)

Dies ist mein Code, der zeigt, wie ich Liste der Werte der Zeilen erstellen müssen update.I Update Zeilen, deren Nachrichten nur String sein NULL.

def UpdatePostingList (self, data): 

    queryUpdate='Update KeywordIndex2 set postings=%s where keyValue= %s' 

    querySelect='SELECT postings FROM KeywordIndex2 where keyValue= %s' 
    list=[] 
    try: 

     for i in range(0,len(data)): 
      keyValue=data[i][0] 
      k=(keyValue,) 
      self.cursor.execute(querySelect,k) 
      postings= self.cursor.fetchall() 
      pst=[x[0] for x in postings] 
      if pst[0]=='NULL': 
       p=data[i][1] 
       list.insert(i, (p,keyValue)) 
     print list 
     self.cursor.executemany(queryUpdate,list) 
     self.connection.commit() 
    except MySQLdb.Error, e: 
     try: 
      print "MySQL Error [%d]: %s" % (e.args[0], e.args[1]) 
     except IndexError: 
      print "MySQL IndexError: %s" % str(e) 
     self.connection.rollback() 

habe ich diese Ausgabe:

[([(3, 0.4698370099067688), (12, 0.38598471879959106), (2, 0.33203423023223877), (1, 0.3257867097854614), (8, 0.3251670002937317)], 'york'), ([(21, 0.5803983509540558), (18, 0.5671890079975128), (24, 0.5287801623344421), (9, 0.5264906287193298), (15, 0.47776609659194946)], 'yang'), ([(12, 0.6617408990859985), (3, 0.6475195586681366), (15, 0.4491569995880127), (24, 0.4268345832824707), (21, 0.40550071001052856)], 'world')] MySQL Error [1241]: Operand should contain 1 column(s)

Um und die postinglist ist der erste Teil des Tupels der keyValue ist Welt für das letzte Mitglied der Liste klar zu sein.

Antwort

1

Das Problem meines Codes ist, dass ich p als Liste von Tupeln für Spalte Buchungen senden. Ich änderte p zu str (p) in der folgenden Zeile meines Codes und das Problem wurde gelöst.

list.insert(i, (str(p),keyValue)) 
Verwandte Themen