


Wie löst man Probleme bei der Parameterersetzung in SQLite bei der Verwendung von Sequenzen oder Strings?
Oct 19, 2024 pm 03:28 PMFehlerbehebung bei Parameterersetzungsproblemen in SQLite
Sind Probleme bei der Verwendung der Parameterersetzung in SQLite3 mit Python aufgetreten? Hier ist eine ausführliche Untersuchung und eine Lösung.
Um SQL-Injections zu verhindern, wurde die Parameterersetzung durch „?“ ist ratsam. Bei Verwendung dieses Ansatzes kann jedoch ein Fehler auftreten. Zum Beispiel mit dem folgenden Code:
<code class="python">for item in self.inventory_names: self.cursor.execute("SELECT weight FROM Equipment WHERE name = ?", item) self.cursor.close()</code>
Der Fehler „sqlite3.ProgrammingError: Falsche Anzahl der bereitgestellten Bindungen“ tritt auf, was darauf hinweist, dass die Anweisung eine Bindung angibt, während acht bereitgestellt werden. Dieses Problem ist auf die anfängliche Erstellung der Datenbanktabelle zurückzuführen. Das für die Datenbankerstellung verantwortliche Modul enthält acht Bindungen, was zu der Nichtübereinstimmung führt.
<code class="python">cursor.execute("""CREATE TABLE Equipment (id INTEGER PRIMARY KEY, name TEXT, price INTEGER, weight REAL, info TEXT, ammo_cap INTEGER, availability_west TEXT, availability_east TEXT)""")</code>
Ironischerweise ist das Ersetzen von „?“ mit einem weniger sicheren „%s“ löst das Problem:
<code class="python">for item in self.inventory_names: self.cursor.execute("SELECT weight FROM Equipment WHERE name = '%s'" % item) self.cursor.close()</code>
Der Grund für dieses Paradoxon liegt in der Art und Weise, wie Cursor.execute() seinen zweiten Parameter akzeptiert. Anstelle einer einzelnen Zeichenfolge wird eine Sequenz erwartet, aber Sie übergeben eine Zeichenfolge der Länge acht.
Um dieses Problem zu beheben, passen Sie den Code wie folgt an:
<code class="python">self.cursor.execute("SELECT weight FROM Equipment WHERE name = ?", [item])</code>
Diese Änderung stellt sicher, dass die Parameterersetzung wie vorgesehen funktioniert. Stellen Sie immer sicher, dass der zweite an Cursor.execute() übergebene Parameter der angegebenen Anzahl von Bindungen in der SQL-Anweisung entspricht.
Das obige ist der detaillierte Inhalt vonWie löst man Probleme bei der Parameterersetzung in SQLite bei der Verwendung von Sequenzen oder Strings?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Wie benutze ich eine schöne Suppe, um HTML zu analysieren?

So herunterladen Sie Dateien in Python

So verwenden Sie Python, um die ZiPF -Verteilung einer Textdatei zu finden

Wie man mit PDF -Dokumenten mit Python arbeitet

Wie kann man mit Redis in Django -Anwendungen zwischenstrichen

Wie führe ich ein tiefes Lernen mit Tensorflow oder Pytorch durch?

So implementieren Sie Ihre eigene Datenstruktur in Python
