Heim >Datenbank >MySQL-Tutorial >Wie führe ich „SELECT ... WHERE ... IN ...'-Abfragen mit MySQLdb in Python aus?

Wie führe ich „SELECT ... WHERE ... IN ...'-Abfragen mit MySQLdb in Python aus?

DDD
DDDOriginal
2024-11-02 17:19:29642Durchsuche

How to Execute

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn