2010-08-04 24 views
9

Estoy usando python 2.7 y pymssql 1.9.908.¿Cómo uso los parámetros de SQL con Python?

En .NET para consultar la base de datos me gustaría hacer algo como esto:

using (SqlCommand com = new SqlCommand("select * from Customer where CustomerId = @CustomerId", connection)) 
{ 
    com.Parameters.AddWithValue("@CustomerID", CustomerID); 
    //Do something with the command 
} 

que estoy tratando de averiguar cuál es el equivalente es de pitón y más particularmente pymssql. Me doy cuenta de que podría simplemente hacer un formateo de cadenas, sin embargo, eso no parece manejar escaparse correctamente como lo hace un parámetro (podría estar equivocado al respecto).

¿Cómo hago esto en Python?

+0

Excelente pregunta y respuestas. ¿Alguien sabe cómo usar los parámetros * NAMED * como Jason arriba? Hasta ahora solo he podido usar% s,% d tipo de cosas (posicional). –

Respuesta

19

Después de crear un objeto de conexión db:

cursor = db.execute('SELECT * FROM Customer WHERE CustomerID = %s', [customer_id]) 

a continuación, utilizar cualquiera de los métodos de la fetch...cursor objeto resultante.

No se deje engañar por la parte %s: Este no es el formato de cadenas, es parámetro de sustitución (módulos API diferente DB usan diferentes sintaxis de sustitución de parámetros - pymssql sólo pasa a utilizar el desafortunado %s -!).

+2

Gracias. La sintaxis '% s' me estaba tirando. –

+0

@Jason, y la posible confusión es exactamente la razón por la que llamo desafortunado a esa sintaxis para los parámetros de la API de DB (aunque muchos módulos populares de DB API lo usan, ¡ay!). –

+1

¡Maldita sea la sintaxis engañosa de% s! Acabo de pasar una hora tratando de entender por qué mi código se quejó por intentar usar% d para especificar un parámetro int. Me llevaron a pensar que es el formato de Python el que está en uso aquí. – Passiday

Cuestiones relacionadas