ich als Beispiel die einfachste der SQL-Funktionen übernehmen werden:Warum führt psycopg2 keine meiner SQL-Funktionen aus? (Indexerror: Tupelindex außerhalb des Bereichs)
CREATE OR REPLACE FUNCTION skater_name_match(INTEGER,VARCHAR)
RETURNS BOOL AS
$$
SELECT $1 IN (SELECT skaters_skater.competitor_ptr_id FROM skaters_skater
WHERE name||' '||surname ILIKE '%'||$2||'%'
OR surname||' '||name ILIKE '%'||$2||'%');
$$ LANGUAGE SQL;
Wenn ich kopieren und diese in psql (PostgreSQL Shell), dann führt es ohne Probleme .
Wenn ich ein Stück Python-Code wie folgt schreiben (mit einem echten Datenbanknamen und Benutzer natürlich):
import psycopg2
sql_function_above = '''CREATE OR REPLACE FUNCTION skater_name_match(INTEGER,VARCHAR)
RETURNS BOOL AS
$$
SELECT $1 IN (SELECT skaters_skater.competitor_ptr_id FROM skaters_skater
WHERE name||' '||surname ILIKE '%'||$2||'%'
OR surname||' '||name ILIKE '%'||$2||'%');
$$ LANGUAGE SQL;'''
try:
connection = psycopg2.connect("dbname='x' user='x' host='localhost' password='x'");
except:
print "I am unable to connect to the database"
cursor = connection.cursor()
cursor.execute(sql_function_above)
Es scheint auszuführen (es gibt mir keinen Fehler), aber wenn ich in die Datenbank schaue, ist die Funktion nicht da.
Wenn ich versuche, den Code in Django auszuführen, indem es in eine app/SQL/model.sql Datei setzt ich folgende Fehlermeldung während syncdb erhalten:
IndexError: tuple index out of range
Wenn ich versuche, meine eigene Verwaltung zu schreiben. Py-Befehl, der die SQL ausführen würde, bekomme ich den gleichen Fehler.
Was geht hier vor? Wäre sehr dankbar für jeden, der etwas Licht in diese Sache bringen könnte :) Ich bin immer noch ein Neuling, wenn es um Python und Django geht, also habe ich vielleicht etwas Offensichtliches übersehen.
Wären Sie in der Lage, die tatsächliche Anweisung hinzuzufügen, die Sie in "Cursor ausführen".execute (sql_function_above) "(oder zeigen Sie an, wo Sie 'sql_function_above' definieren, wenn Sie diesen Bezeichner wörtlich verwenden wollen.) –
Zeigen Sie uns, wie Sie sql_function_above 'in Ihrem Python-Code definiert haben. – nos
Es war eine Vereinfachung von meiner Seite Ich habe versucht, die Variable auf verschiedene Arten zu schreiben. Ich habe auch versucht, den Text aus einer SQL-Datei zu lesen. Alle diese erzeugt den gleichen Fehler. Eine der vielen Möglichkeiten schrieb ich die Variable in die ursprüngliche Frage bearbeitet. PS Danke für alle Antworten - es ist das erste Mal, dass ich stackoverflow.com benutze und die Hilfsbereitschaft und Geschwindigkeit der Antworten von euch ist erstaunlich :) –