Tengo una lista de identificadores de filas para recuperar de la base de datos. Estoy usando python y psycopg2, y mi problema es cómo pasar efectivamente esos identificadores a SQL. Quiero decir que si conozco la longitud de esa lista, es bastante fácil porque siempre puedo agregar manualmente o automáticamente tantas expresiones "% s" en la cadena de consulta como sea necesario, pero aquí no sé cuánto necesito. . Es importante que necesite seleccionar las filas usando la declaración sql "id IN (id1, id2, ...)". Sé que es posible verificar la longitud de la lista y concatenar el número adecuado de "% s" en la cadena de consulta, pero me temo que sería muy lento y feo. ¿Alguien tiene una idea sobre cómo resolverlo? Y por favor no pregunte por qué tengo que hacerlo con la declaración "IN" - es un punto de referencia que es parte de mi asignación de clase. ¡Gracias por adelantado!Pasando la lista de parámetros a SQL en psycopg2
Respuesta
tuplas Python se convierten en listas de SQL en psycopg2:
cur.mogrify("SELECT * FROM table WHERE column IN %s;", ((1,2,3),))
emitiría
'SELECT * FROM table WHERE column IN (1,2,3);'
para Python recién llegados: Por desgracia, es importante utilizar una tupla, no una lista aquí. Segundo ejemplo:
cur.mogrify("SELECT * FROM table WHERE column IN %s;",
tuple([row[0] for for in rows]))
Gracias, no me di cuenta. El único problema con su solución es que ha olvidado la coma en esa tupla. –
gracias - se corrigió – philofinfinitejest
Tenga en cuenta que las LISTAS de Python se convertirán en tipos de ARCHIVO Postgres, así que me parece que con frecuencia necesito hacer algo como (tupla (SOME_LIST),) en mis argumentos cursor.execute (...). Observe cómo estamos envolviendo la tupla() de la lista en una tupla literal de un solo elemento, por lo que tenemos una tupla de tuplas como se muestra en este ejemplo. –
- 1. ¿Está pasando la lista de parámetros nombrados para funcionar?
- 2. Pasando los parámetros a Asynctask
- 3. pasando parámetros a un hilo
- 4. psycopg2 equivalente a mysqldb.escape_string?
- 5. Pasando parámetros de URL aleatorios a OmniAuth
- 6. pasando parámetros a php incluye/requiere construir
- 7. pasando los parámetros a mi vista parcial?
- 8. Java generics pasando parámetros
- 9. Pasando parámetros estáticos a una clase
- 10. Entity Framework 4.0 Entity SQL pasando ObjectParameter nula parámetros
- 11. Pasando los parámetros a los informes de cristal en C#
- 12. Pasando un delegado con dos parámetros en función de parámetros
- 13. lista de parámetros grande para la consulta SQL
- 14. llamando a exec en un archivo php y pasando parámetros?
- 15. Pasando la lista de argumentos variables a sprintf()
- 16. REST pasando Parámetros con Java
- 17. múltiples parámetros en la lista
- 18. C# pasando parámetros adicionales a un controlador de eventos?
- 19. ¿Qué está pasando los parámetros a SQL y por qué lo necesito?
- 20. Pasando la lista al procedimiento Tcl
- 21. Pasando una lista de kwargs?
- 22. Tapestry - Pasando Parámetros al método de tml
- 23. Pasando los parámetros a la declaración SQLl de JasperReports desde Java
- 24. Pasando los parámetros a telerik asp.net grid mvc
- 25. ¿Cómo iniciar una intención pasando algunos parámetros a ella?
- 26. Filtrado de consulta SQL por lista de parámetros
- 27. pasando nodos xml/documentos/fragmentos como parámetros a xslt
- 28. Pasando parámetros a la hoja de estilo XSLT a través de .NET
- 29. Instalar psycopg2 en Ubuntu
- 30. Pasando los parámetros de la lista <Enum> en el filtro de acción personalizado en ASP.NET MVC3
¿Se opone a una respuesta de SQL? Al usar SQL dinámico, puede dar una cadena de cualquier longitud y hacer que SQL la lea correctamente. – Twelfth