Ok, ich bin nicht so erfahren in Python.
Ich habe den folgenden Python-Code:
cursor.execute("INSERT INTO table VALUES var1, var2, var3,")
Wo var1
ist eine ganze Zahl, var2
& var3
sind Zeichenfolgen.
Wie kann ich die Variablennamen schreiben, ohne dass Python sie als Teil des Abfragetextes enthält?
%
. Tatsächlich sage ich das in der Antwort.%
statt,
zwischen dem String und den Variablen vor .. kann mein Abstimmen aus verschiedenen Gründen nicht rückgängig machen .. Ich persönlich würde gerne Wörter wie unsicher / angreifen usw. sehen, die in der Beschreibung erwähnt werden, in der Sie don sagen 't use%
..%
Operator nicht zum Formatieren der Zeichenfolge. Die%
in der Zeichenfolge werdencursor.execute
direkt von verwendet, und da es weiß, dass es SQL generiert, kann es mehr tun, um Sie zu schützen.Verschiedene Implementierungen der Python DB-API dürfen unterschiedliche Platzhalter verwenden. Sie müssen also herausfinden, welchen Sie verwenden - dies könnte sein (z. B. mit MySQLdb):
oder (zB mit sqlite3 aus der Python-Standardbibliothek):
oder noch andere (nachdem
VALUES
Sie haben könnten(:1, :2, :3)
, oder "benannte Stile"(:fee, :fie, :fo)
oder(%(fee)s, %(fie)s, %(fo)s)
wo Sie ein Diktat anstelle einer Karte als zweites Argument übergebenexecute
). Überprüfen Sie dieparamstyle
Zeichenfolgenkonstante in dem von Ihnen verwendeten DB-API-Modul und suchen Sie unter http://www.python.org/dev/peps/pep-0249/ nach paramstyle, um zu sehen, welche Stile zur Parameterübergabe vorhanden sind!quelle
Viele Möglichkeiten. Verwenden Sie NICHT das offensichtlichste (
%s
mit%
) in echtem Code, es ist offen für Angriffe .Hier kopieren und einfügen aus pydoc von sqlite3 :
Weitere Beispiele, wenn Sie brauchen:
quelle
http://www.amk.ca/python/writing/DB-API.html
Seien Sie vorsichtig, wenn Sie einfach Werte von Variablen an Ihre Anweisungen anhängen: Stellen Sie sich einen Benutzer vor, der sich selbst benennt. Aus
';DROP TABLE Users;'
diesem Grund müssen Sie SQL Escape verwenden, das Python für Sie bereitstellt, wenn Sie cursor.execute auf anständige Weise verwenden. Beispiel in der URL ist:quelle