script postgres executemany consulta python sql postgresql

python - postgres - TypeError: el objeto ''int'' no admite la indexación



python consulta postgresql (3)

Tengo esta consulta:

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

Obtuve el siguiente error:

TypeError: ''int'' object does not support indexing

some_id es un int, pero me gustaría seleccionar indicadores que tengan some_id = 1 (o lo que sea # decido poner la variable).


Debe pasar los parámetros de consulta a execute() como una tupla (un iterable, en sentido estricto), (some_id,) lugar de some_id :

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


Su identificación debe ser un tipo de iterable para que mogrify entienda la entrada, aquí está la cita relevante de la documentación de preguntas frecuentes :

>>> cur.execute("INSERT INTO foo VALUES (%s)", "bar") # WRONG >>> cur.execute("INSERT INTO foo VALUES (%s)", ("bar")) # WRONG >>> cur.execute("INSERT INTO foo VALUES (%s)", ("bar",)) # correct >>> cur.execute("INSERT INTO foo VALUES (%s)", ["bar"]) # correct

Esto debería funcionar:

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


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

Esto convierte el parámetro some_id en una lista, que es indexable. Asumiendo que su método funciona como creo que lo hace, esto debería funcionar.

El error está ocurriendo porque en algún lugar de ese método, probablemente esté intentando iterar sobre esa entrada, o indexarlo directamente en él. Posiblemente así: some_id[0]

Al convertirla en una lista (o iterable), le permite indexar en el primer elemento como ese.

También puedes convertirlo en una tupla haciendo esto: (some_id,) que tiene la ventaja de ser inmutable.