Ich habe eine große Geschwindigkeitsschwelle beim Einfügen von Daten in meine DB erreicht. Aus dem folgenden Code geht hervor, dass ich einfach die SQL-Anweisung erstelle, die an den Befehl execute übergeben wird. Die Werte sind korrekt und alles ist gut, aber der Python-Interpreter scheint zur Laufzeit Quotes von den Parametern hinzuzufügen und zu entfernen.
Dies ist die richtige Methode zum Einfügen von räumlichen Daten in die DB.
%Vor%Dies ist im Postgres-Abfrageeditor überprüfbar ... Jetzt, wenn ich den folgenden Python-Code ausführe, fügt er doppelte Anführungszeichen um die ST_GeomFromText-Funktion ein und entfernt dann die Anführungszeichen aus der ID-Spalte.
%Vor%Dies führt dazu, dass die Einfügung fehlschlägt und PostGIS behauptet, dass es keine richtige Geometrie ist. Wenn ich jedes einzelne der Params ausdrucke, um es auf dem Bildschirm anzuzeigen, geschieht nichts Lustiges mit den Anführungszeichen, deshalb denke ich, dass das Problem im Execute-Befehl liegen muss. Ich benutze Python 2.7 ... Kann jemand eine Hand darauf geben, wie man verhindert, dass diese Verrücktheit fortfährt?
%Vor% Sie übergeben die Zeichenfolge ST_GeomFromText('POINT(..)')
als Parameter, und psycopg2 entkommt. % Co_de% ist jedoch eine PostGIS-Funktion, keine Daten, die Sie einfügen.
Um dies zu beheben, müssen Sie die Funktion ST_GeomFromText(..)
in das statische SQL verschieben. Zum Beispiel:
Es ist besser (editieren: als was du machst, nicht als erste Antwort), etwas wie das zu tun:
%Vor% Und übergeben Sie das an Ihren Adapter mit den Coords in einem Tupel, sie werden korrekt analysiert. Dies ist bei weitem der am wenigsten schmerzhafte Weg, dies zu tun. Wenn Sie die Zeichenfolgen wirklich getrennt konstruieren müssen, können Sie die Ausgabe bereinigen, indem Sie die Ausgabe von cur.mogrify
:
Widerstehen Sie der Versuchung, eine String-Formatierungsmethode für eine SQL-Abfragezeichenfolge zu verwenden, auch wenn diese Dinge frustrierend sein können.