python - query - sqlite select order by limit example
Pregunta SQLite3 parámetro ORDER BY con? notación (1)
Estoy tratando de hacer una consulta con sqlite3 en python, para ser ordenada por una columna de parámetros "overall_risk" o "latest_risk" (que es el número doble)
param = (''overall_risk'',)
cur = db.execute("SELECT * FROM users ORDER BY ? DESC", param)
Sin embargo, no devuelvo los datos ordenados por "overall_risk"
(o "latest_risk"
), además, cuando escribo la consulta como:
"SELECT * FROM users ORDER BY " + ''overall_risk'' + " DESC"
funciona
Los parámetros SQL no se pueden usar para nada más que valores . El objetivo de usar un marcador de posición es tener el valor correctamente citado para evitar que se interprete como parte de una declaración de SQL o como un objeto.
Está intentando insertar un nombre de objeto, no un valor, por lo que no puede usar ?
para esto. Tendrá que usar el formato de cadena y tener mucho cuidado con los nombres que permite:
cur = db.execute("SELECT * FROM users ORDER BY {} DESC".format(column_name))
Si column_name
se toma de la entrada del usuario, deberá validar esto con los nombres de columna existentes.
La alternativa es usar una biblioteca como SQLAlchemy para generar su SQL por usted. Consulte el tutorial de SQL Expression Language .