Erzeuge SQL-Anweisungen mit Python [Duplikat]

8

Ich muss eine Liste von Insert-Anweisungen (für PostgreSQL) aus HTML-Dateien generieren, gibt es eine Bibliothek für Python, die mir hilft, die Namen / Werte richtig zu entziffern und zu zitieren? in PHP verwende ich PDO, um das Entkommen und das Zitieren zu tun, gibt es irgendeine gleichwertige Bibliothek für Python?

Bearbeiten: Ich muss eine Datei mit SQL-Anweisungen für die spätere Ausführung generieren

    
Jeffrey04 14.10.2009, 02:31
quelle

5 Antworten

13

Ich weiß, das ist eine alte Frage, aber ich habe oft gewollt, was das OP will: Eine SEHR einfache Bibliothek zum Generieren von SQL.

Die folgenden Funktionen tun genau das. Sie geben ihnen einen Tabellennamen und ein Wörterbuch, das die Daten enthält, die Sie verwenden möchten, und sie geben die SQL-Abfrage für die Operation zurück, die Sie benötigen.

Die Schlüssel / Wert-Paare repräsentieren Feldnamen und Werte in den Datenbankzeilen.

%Vor%

Sie benutzen es so. Gib ihm einfach einen Tabellennamen und ein Wörterbuch (oder verwende die ** kwargs-Funktion von python):

%Vor%

Aber Vorsicht vor SQL-Injection-Attacken

Sehen Sie, was passiert, wenn ein böswilliger Benutzer Ihres Codes das tut:

%Vor%

Es ist einfach, selbst behelfsmäßiges ORM zu machen, aber Sie bekommen nur das, was Sie sehen - Sie müssen sich selbst dem Input entziehen:)

    
Morten Jensen 14.11.2012 12:09
quelle
10

SQLAlchemy bietet eine robuste Ausdruckssprache zum Erzeugen von SQL aus Python.

Wie bei jeder anderen gut entworfenen Abstraktionsschicht fügen die erzeugten Abfragen Daten jedoch über Bindevariablen ein, anstatt zu versuchen, die Abfragesprache und die Daten, die in eine einzelne Zeichenfolge eingefügt werden, zu mischen. Dieser Ansatz vermeidet massive Sicherheitslücken und ist ansonsten das Richtige.

    
Charles Duffy 14.10.2009 04:21
quelle
2

Aus Gründen der Robustheit empfehle ich die Verwendung vorbereiteter Anweisungen zum Senden von benutzerdefinierten Werten, unabhängig von der verwendeten Sprache. : -)

    
Chris Jester-Young 14.10.2009 02:35
quelle
1

Die python db api 2.0 hat eine ".execute" -Methode für Verbindungsobjekte. Sie können Parameter angeben (verwenden Sie ein Komma NICHT ein% -Zeichen, um Parameter von der Abfragezeichenfolge zu trennen) mit dieser Funktion.

    
atk 14.10.2009 02:51
quelle
1

Generell ist es eine schlechte Idee, Parameter manuell zu notieren. Was ist, wenn es einen Fehler gibt, Regeln zu umgehen? Was ist, wenn die Escape-Datei nicht der verwendeten DB-Version entspricht? Was passiert, wenn Sie vergessen, einen Parameter zu verlassen, oder fälschlicherweise angenommen haben, dass er keine Daten enthalten kann, die es zu umgehen gilt? Das alles kann zu einer SQL-Injection-Schwachstelle führen. Außerdem kann die DB einige Einschränkungen für die Länge der SQL-Anweisung haben, während Sie große Datenblöcke für die LOB-Spalte übergeben müssen. Das ist der Grund, warum Python DB API und die meisten Datenbanken (Python DB API Modul wird transparent Parameter entkommen, wenn die Datenbank dies nicht unterstützt, wie es früher MySQLdb tat) erlauben Passagen getrennt von statement:

  

.execute (Operation [, Parameter])

    
Denis Otkidach 14.10.2009 04:23
quelle

Tags und Links