2013-08-20 13 views
25

ho questa query:TypeError: 'int' oggetto non supporta l'indicizzazione

some_id = 1 

cursor.execute(' 
    SELECT "Indicator"."indicator" 
    FROM "Indicator" 
    WHERE "Indicator"."some_id" = %s;', some_id) 

ottengo il seguente errore:

TypeError: 'int' object does not support indexing 

some_id è un int, ma mi piacerebbe selezionare indicatori che hanno some_id = 1 (o qualunque cosa # decido di inserire nella variabile).

risposta

30
cursor.execute(' 
    SELECT "Indicator"."indicator" 
    FROM "Indicator" 
    WHERE "Indicator"."some_id" = %s;', [some_id]) 

Questo trasforma il parametro some_id in un elenco, che è indicizzabile. Supponendo che il tuo metodo funzioni come penso che faccia, dovrebbe funzionare.

L'errore sta accadendo perché da qualche parte in quel metodo, probabilmente sta tentando di scorrere su quell'input, o indicizzarlo direttamente. Forse così: some_id[0]

Facendo un elenco (o iterabile), gli permetti di indicizzare il primo elemento in quel modo.

Si potrebbe anche fare in una tupla facendo questo: (some_id,) che ha il vantaggio di essere immutabile.

+0

Grazie! solo un paio di [] cambia tutto suppongo ... – nlr25

22

si dovrebbe passare parametri di query per execute() come una tupla (un iterabile, in senso stretto), (some_id,) invece di some_id:

cursor.execute(' 
    SELECT "Indicator"."indicator" 
    FROM "Indicator" 
    WHERE "Indicator"."some_id" = %s;', (some_id,)) 
+4

La virgola fa TUTTA la differenza. Non ho capito che una singola tupla di oggetti non si trasforma in una tupla senza una virgola ... –

Problemi correlati