Heim > Datenbank > MySQL-Tutorial > Hauptteil

Warum schlägt die Abfrage „SELECT ... WHERE ... IN ...' in MySQLdb fehl?

Barbara Streisand
Freigeben: 2024-11-01 17:32:02
Original
797 Leute haben es durchsucht

Why is

Ausführen von „SELECT ... WHERE ... IN ...“ mit MySQLdb

Trotz erfolgreicher Ausführung von SQL-Abfragen von Wenn Sie die MySQL-Befehlszeile verwenden, kann es bei der Ausführung von Abfragen mit der Syntax „WHERE ... IN ...“ in Python mithilfe von MySQLdb zu Problemen kommen. Lassen Sie uns das Problem untersuchen und eine Lösung finden.

In Ihrem Fall können Sie mit einer Abfrage, die die Spalte „bar“ mit einer „IN“-Klausel filtert, keine Zeilen abrufen, während eine ähnliche Abfrage, die die „ fooid“-Spalte mit „IN“ ist erfolgreich. Diese Inkonsistenz kann auf die Art und Weise zurückgeführt werden, wie MySQLdb parametrisierte Abfragen verarbeitet.

Wenn Sie ein Array von Werten als Argument für MySQLdb angeben, wird es automatisch in ein Tupel von Zeichenfolgen mit einfachen Anführungszeichen konvertiert, was zu einer falschen Syntax für führt die „IN“-Klausel. Beispielsweise konvertiert Ihr Code ['A','C'] in ("'A'", "'C'").

 args=[['A','C']] 

Um dieses Problem zu beheben, müssen Sie die SQL-Zeichenfolge manuell erstellen und Python verwenden, um die Werte in der „IN“-Klausel zu verketten:

<code class="python">args=['A', 'C']
sql='SELECT fooid FROM foo WHERE bar IN (%s)' 
in_p=', '.join(list(map(lambda x: '%s', args)))
sql = sql % in_p
cursor.execute(sql, args)</code>
Nach dem Login kopieren

Alternativ können Sie für Python 2 den folgenden Code verwenden:

<code class="python">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)</code>
Nach dem Login kopieren

Dieser Code generiert dynamisch den SQL-String mit der richtigen Anzahl an Platzhaltern ('%s') von Iterieren Sie die Werte im Array und verbinden Sie sie mit einem Komma. Wenn Sie diese manuell erstellte Abfrage ausführen, erhalten Sie das erwartete Ergebnis, indem Sie Fooids auswählen, in denen sich die Spalte „bar“ in ('A','C') befindet.

Das obige ist der detaillierte Inhalt vonWarum schlägt die Abfrage „SELECT ... WHERE ... IN ...' in MySQLdb fehl?. 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
Neueste Artikel des Autors
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!