2013-08-20 19 views
25

mam tej kwerendy:TypeError: 'int' obiekt nie obsługuje indeksowania

some_id = 1 

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

pojawia się następujący błąd:

TypeError: 'int' object does not support indexing 

some_id jest int, ale chciałbym, aby wybrać wskaźniki które mają wartość some = id = 1 (lub dowolne # decyduję się umieścić w zmiennej).

Odpowiedz

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

Włącza parametr some_id na listę, która jest wiertła. Zakładając, że twoja metoda działa tak, jak sądzę, to powinno działać.

Błąd występuje, ponieważ gdzieś w tej metodzie prawdopodobnie próbuje on iterować na tym wejściu lub indeksować bezpośrednio do niego. Prawdopodobnie w ten sposób: some_id[0]

Dzięki utworzeniu listy (lub iteracji) pozwala się jej indeksować do pierwszego takiego elementu.

Można również przekształcić go w krotkę: (some_id,), która ma tę zaletę, że jest niezmienna.

+0

Dzięki! tylko para [] zmienia wszystko, co przypuszczam ... – nlr25

22

Należy przekazać parametry zapytania do execute() jako krotki (an iterable, ściśle mówiąc), (some_id,) zamiast some_id:

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

Przecinek robi CAŁĄ różnicę. Nie zdałem sobie sprawy, że krotka pozycja nie zmienia się w krotkę bez przecinka ... –

Powiązane problemy