Heim > Datenbank > MySQL-Tutorial > Hauptteil

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

DDD
Freigeben: 2024-11-02 17:19:29
Original
545 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!