python - len - psycopg2 query examples
DeclaraciĆ³n de Python/psycopg2 WHERE IN (3)
Para el operador
IN
, desea una
tuple
lugar de una
list
y eliminar los paréntesis de la cadena SQL.
# using psycopg2
data=(''UK'',''France'')
sql=''SELECT * from countries WHERE country IN %s''
cur.execute(sql,(data,))
Durante la depuración, puede verificar que el SQL esté construido correctamente con
cur.mogrify(sql, (data,))
¿Cuál es el método correcto para que la lista (countryList) esté disponible a través de% s en la instrucción SQL?
# using psycopg2
countryList=[''UK'',''France'']
sql=''SELECT * from countries WHERE country IN (%s)''
data=[countryList]
cur.execute(sql,data)
Tal como está ahora, se produce un error después de intentar ejecutar "WHERE country in (ARRAY [...])". ¿Hay alguna manera de hacer esto que no sea a través de la manipulación de cadenas?
Gracias
Para explicar un poco la respuesta y abordar los parámetros con nombre, y convertir las listas en tuplas:
countryList = [''UK'', ''France'']
sql = ''SELECT * from countries WHERE country IN %(countryList)s''
cur.execute(sql, { # You can pass a dict for named parameters rather than a tuple. Makes debugging hella easier.
''countryList'': tuple(countryList), # Converts the list to a tuple.
})
Puede usar una lista de Python directamente como se muestra a continuación. Actúa como el operador IN en SQL y también maneja una lista en blanco sin arrojar ningún error.
data=[''UK'',''France'']
sql=''SELECT * from countries WHERE country = ANY (%s)''
cur.execute(sql,(data,))
fuente: list