mi prendo la più semplice delle funzioni SQL come esempio:Perché psycopg2 non sta eseguendo nessuna delle mie funzioni SQL? (IndexError: indice di tupla fuori campo)
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;
Se Copio e incollo questo in psql (il guscio di PostgreSQL) allora esegue senza problemi .
Se scrivo un pezzo di codice Python come questo (con un vero nome del database e l'utente, naturalmente):
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)
E sembra da eseguire (che non mi dà un errore), ma quando guardo nel database la funzione non è lì.
Quando provo ad eseguire il codice in Django mettendolo in un file/model.sql applicazione sql/ottengo il seguente errore durante syncdb:
IndexError: tuple index out of range
Quando tento di scrivere la mia gestire. comando py che eseguiva sql, ottengo lo stesso errore.
Cosa sta succedendo qui? Sarei molto grato a chiunque possa far luce su questo :) Sono ancora un principiante quando si tratta di Python e Django, quindi potrei aver trascurato qualcosa di ovvio.
Sarebbe possibile aggiungere l'istruzione effettiva che si sta eseguendo in "cursore".execute (sql_function_above) "(o mostra dove definisci 'sql_function_above' se intendi letteralmente usare quell'identificatore) –
Mostraci come hai definito sql_function_above 'nel tuo codice Python. – nos
Scusa, è stata una semplificazione da parte mia. Ho provato a scrivere la variabile in vari modi, ho anche provato a leggere il testo da un file sql. Tutti questi hanno prodotto lo stesso errore: uno dei tanti modi in cui ho scritto la variabile modificata nella domanda originale ora. risposte: è la prima volta che utilizzo stackoverflow.com e la disponibilità e la velocità delle risposte da parte dei ragazzi è incredibile :) –