Ausführen von „SELECT ... WHERE ... IN ...“ mit MySQLdb
In Python das Ausführen von SQL-Abfragen mit dem „ IN“-Klausel mit MySQLdb kann auf Herausforderungen stoßen. Stellen Sie sich das folgende Szenario vor:
Problem:
Versuch, eine Abfrage wie diese auszuführen:
<code class="sql">SELECT fooid FROM foo WHERE bar IN ('A','C');</code>
aus Python heraus mit dem folgenden Code:
<code class="python">import MySQLdb import config connection=MySQLdb.connect( host=config.HOST,user=config.USER,passwd=config.PASS,db='test') cursor=connection.cursor() sql='SELECT fooid FROM foo WHERE bar IN %s' args=[['A','C']] cursor.execute(sql,args) data=cursor.fetchall() print(data) # ()</code>
führt zu einem leeren Datensatz, obwohl zwei Zeilen erwartet werden.
Ursache:
MySQLdb fügt automatisch einfache Anführungszeichen um Elemente in ein Die Eingabelistenargumente führen dazu, dass die Abfrage wie folgt ausgeführt wird:
<code class="sql">SELECT fooid FROM foo WHERE bar IN ("'A'", "'C'")</code>
Diese Abfrage unterscheidet sich von der ursprünglich beabsichtigten Abfrage, bei der eine Liste in einfachen Anführungszeichen verwendet wurde.
Lösung:
Um dieses Problem zu beheben, müssen Sie die Abfrageparameter manuell erstellen. Hier ist eine modifizierte Version des Python-Codes, die das Problem behebt:
<code class="python">import MySQLdb import config connection=MySQLdb.connect( host=config.HOST,user=config.USER,passwd=config.PASS,db='test') cursor=connection.cursor() args=['A', 'C'] sql='SELECT fooid FROM foo WHERE bar IN (%s)' in_p=', '.join(map(lambda x: '%s', args)) sql = sql % in_p cursor.execute(sql, args) data=cursor.fetchall() print(data) # (('1',), ('3',))</code>
Indem Sie den in_p-String mit map() erstellen und ihn mit Kommas verbinden, erstellen Sie effektiv eine Reihe von Platzhaltern für die Elemente in args. Durch die Verwendung des %-Operators wird sichergestellt, dass die Platzhalter bei der Ausführung der Abfrage korrekt durch die tatsächlichen Werte ersetzt werden.
Das obige ist der detaillierte Inhalt vonWie führe ich „SELECT ... WHERE ... IN ...'-Abfragen mit MySQLdb in Python aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!