2017-09-06 1 views
3

Ich versuche, eine SQL-Anweisung zu machen, die mehrere Zeilen mit Schlüsselsatz aktualisiert. Mir ist klar, dass ich für jede einzelne Anweisung mit Anweisung laufen könnte, aber das scheint mir "korrekter" und viel schneller zu sein.Gibt es eine Möglichkeit, Python-Set zu konvertieren, um in der SQL-Anweisung "IN" verwendet zu werden?

Das ist, was ich habe:

def end_actions(self, timestamp, ids): 
     statement = "UPDATE items " \ 
       "SET end_time = " + timestamp + " " \ 
       "WHERE auction IN " + ids + ";" 
     self.execute_statement(statement) 

Frage ist, wie ich IDs forma gesetzt von SQL des IN-Anweisung akzeptiert werden.

Danke.

Antwort

2

Ich weiß nicht, welchen Typ Ihre IDs sind. Ich nehme an, es ist eine Menge von ganzen Zahlen. Sie möchten, dass die SQL-Klausel in etwa wie folgt aussieht: WHERE auction IN (1, 2, 3);. So können Sie map Ihr Set zu einer Liste von Zeichenfolgen und übergeben Sie es an join mit einem Komma-Trennzeichen und wickeln Sie es in Klammern.

"WHERE auction IN (" + ", ".join(map(str, ids)) + ");" 

EDIT: Wenn Sie stattdessen Strings wollen, müssen Sie möglicherweise es in Anführungszeichen viel ersten

"WHERE auction IN (" + ", ".join("'" + id + "'" for id in ids) + ");" 
+0

Dank wickeln, war nicht klar, dass Python eine Map-Funktion hat, sollte gut funktionieren. – PapeK24

Verwandte Themen