SQLite3 consulta el parámetro ORDER BY con? notación

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 de SQL no se pueden utilizar para nada más que valores . El punto principal en el uso de un marcador de posición es tener el valor correctamente citado para evitar que se interprete como parte de una statement SQL o como un objeto.

¿Está intentando insertar un nombre de objeto, no un valor, por lo que no puede usarlo ? para esto. Tendrá que usar el formato de cadena y ser extremadamente cuidadoso 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á validarlo con los nombres de columna existentes.

La alternativa es usar una biblioteca como SQLAlchemy para generar su SQL para usted. Ver el tutorial del lenguaje de expresión SQL .