Ich versuche, Zeichenfolgen aus einer Datei in eine sqlite
-Datenbank in Python einzufügen. Die Zeichenfolgen verfügen über Leerzeichen (Zeilenumbrüche, Tabulatorzeichen und Leerzeichen) und weisen ebenfalls einfache oder doppelte Anführungszeichen auf. Hier ist, wie ich es versuche:
Ich finde, dass dies mit dem Fehler fehlschlägt:
%Vor%Wie kann ich das erreichen? Müssen die Strings vor dem Einfügen in die db maskiert werden, und wenn ja, wie? Danke.
Sie verwenden SQL-Parameter statt String-Formatierung:
%Vor%Wenn Sie SQL-Parameter verwenden, kann die Datenbankbibliothek das Quoting verarbeiten und, noch besser, der Datenbank die Abfrage optimieren und den optimierten Abfrageplan für mehrere Ausführungen derselben Basisabfrage (mit anderen Parametern) wiederverwenden.
>Zu guter Letzt werden Sie viel besser gegen SQL-Injection-Angriffe geschützt, da die Datenbankbibliothek am besten weiß, wie man gefährlichen SQL-ähnlichen Werten entkommt.
Um die sqlite3-Dokumentation zu zitieren:
Normalerweise müssen Ihre SQL-Operationen Werte aus Python-Variablen verwenden. Sie sollten Ihre Abfrage nicht mit den String-Operationen von Python zusammenstellen, da dies nicht sicher ist. Es macht Ihr Programm anfällig für einen SQL-Injection-Angriff (siehe Ссылка für ein humorvolles Beispiel, was schiefgehen kann).
Verwenden Sie stattdessen die Parameterersetzung der DB-API. Setzen Sie
?
als Platzhalter an die Stelle, an der Sie einen Wert verwenden möchten, und stellen Sie dann ein Tuple von Werten als zweites Argument für dieexecute()
-Methode des Cursors bereit.