Ich möchte Abfrage-Parameter an cursor.execute()
Methode von MySQLdb
als benanntes Wörterbuch, so dass sie Eskorted von SQL-Injektion übergeben.Python MySQLdb: Abfrage Parameter als ein benanntes Wörterbuch
Können Sie erklären, warum dies gibt KeyError:
>>>c.execute('select id from users where username=%(user)s', {'user':'bob',})
KeyError: 'user'
MySQLdb Handbuch http://mysql-python.sourceforge.net/MySQLdb.html sagt:
* paramstyle
String Konstante, die die Art der Parametermarkierung eine von der Schnittstelle erwartet Formatierung. Set to 'Format' = ANSI C Druckformatcodes, z. '... WHERE Name =% s'. Wenn ein Mapping-Objekt für conn.Execute() verwendet wird, dann ist die Schnittstelle verwendet tatsächlich ‚pyformat‘ = Python erweiterten Formatcodes, z.B. '... WHERE Name =% (Name) s'. Allerdings ist die API derzeit nicht der Spezifikation von mehr als ein Stil in paramstyle erlauben *
Ich bin Einfügen eines *** Spaltenwert ***. Die Zeile in der Dokumentation bedeutet, dass der folgende Code ist illegal: 'c.execute ('select id% s wo username =% s' ('Benutzer', 'bob'))' – mercador
@mercador Recht, der 'from% s' piece verursacht den Fehler, da Sie versuchen, den Tabellennamen zu parametrisieren. Der Vorteil der Verwendung von 'execute' auf diese Weise ist, dass es hilft, SQL-Injection zu verhindern, aber wenn Sie die richtigen Sicherheitsvorkehrungen nehmen (was ich auf kein Experte bin, aber richtige sanitization bedeuten würde/der Parameter zu entkommen), können Sie Verwenden Sie die in Python integrierte String-Formatierung, um die Abfrage zu erstellen, und übergeben Sie sie dann an "execute". Auch hier ist SQL-Injection das Hauptanliegen. Hoffe das hilft! – RocketDonkey