Wie fügt man Zeichenketten mit Anführungszeichen und Zeilenumbrüchen in sqlite db mit Python ein?

8

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:

%Vor%

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.

    
user248237dfsf 04.02.2013, 20:34
quelle

1 Antwort

18

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 die execute() -Methode des Cursors bereit.

    
Martijn Pieters 04.02.2013, 20:36
quelle

Tags und Links