WHERE en Python con MySQL

En MySQL, la cláusula WHERE se utiliza en consultas para filtrar filas basadas en una condición especificada. Con esta cláusula, puedes recuperar solo las filas que cumplan con cierta condición.


Sintaxis de WHERE con MySQL en Python

La sintaxis básica de la cláusula WHERE es la siguiente:

SELECT column1, column2, ...
FROM table_name
WHERE condition;

Donde:

  • column1, column2, … son los nombres de las columnas que deseas recuperar de la tabla.
  • table_name es el nombre de la tabla en la que deseas realizar la consulta.
  • condition es la condición que se utiliza para filtrar las filas. Puede ser una expresión que incluya operadores lógicos (como =, <, >, <=, >=, <>, etc.) y palabras clave (como AND, OR, IN, LIKE, BETWEEN, etc.).

Ejemplo de WHERE con MySQL en Python

Seleccione los registros en los que la dirección sea «C/ Mayor 1»: resultado:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="tu usuario",
  passwd="tu contraseña",
  database="tu bbdd"
)

mycursor = mydb.cursor()

sql = "SELECT * FROM clientes WHERE direccion ='C/ Mayor 1'"

mycursor.execute(sql)

myresult = mycursor.fetchall()

for x in myresult:
  print(x)

El código que proporcionaste es un ejemplo de cómo realizar una consulta SQL en Python utilizando la biblioteca mysql.connector para conectarse a una base de datos MySQL. Aquí está el código explicado paso a paso:

  • Importar la biblioteca mysql.connector: Primero, importamos la biblioteca mysql.connector, que nos permite conectarnos a una base de datos MySQL y realizar consultas.
  • Establecer la conexión a la base de datos: Luego, establecemos la conexión a la base de datos MySQL utilizando el método connect() de mysql.connector. Para esto, proporcionamos los detalles del servidor de la base de datos, como el host, el nombre de usuario, la contraseña y el nombre de la base de datos a la que queremos conectarnos.
  • Crear un cursor: Después de establecer la conexión, creamos un cursor utilizando el método cursor() de la conexión. El cursor nos permite interactuar con la base de datos y ejecutar consultas.
  • Escribir la consulta SQL: A continuación, escribimos la consulta SQL que deseamos ejecutar. En este caso, la consulta selecciona todas las columnas de la tabla «clientes» donde la columna «direccion» tiene el valor «C/ Mayor 1».
  • Ejecutar la consulta: Usamos el método execute() del cursor para ejecutar la consulta SQL.
  • Recuperar los resultados: Después de ejecutar la consulta, usamos el método fetchall() del cursor para recuperar todos los resultados de la consulta en forma de una lista de tuplas. Cada tupla representa una fila de datos.
  • Imprimir los resultados: Finalmente, recorremos la lista de tuplas y la imprimimos en la consola.

Caracteres comodín para utilizar WHERE con MySQL en Python

También puede seleccionar los registros que comienzan, incluyen o terminan con una letra o frase determinada.

Usa el % para representar caracteres comodín:

Ejemplo

Seleccione los registros donde la dirección contiene los caracteres «C/»:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user= "tu usuario",
  passwd="tu contraseña",
  database="tu bbdd"
)

mycursor = mydb.cursor()

sql = ""SELECT * FROM clientes WHERE direccion LIKE '%C/%'""

mycursor.execute(sql)

myresult = mycursor.fetchall()

for x in myresult:
  print(x)

Prevenir la inyección de SQL

Cuando el usuario proporciona los valores de consulta, debe escapar de los valores. Esto es para evitar inyecciones de SQL, que es una técnica común de piratería para destruir o hacer un mal uso de su base de datos. El módulo mysql.connector tiene métodos para escapar de los valores de consulta:

Ejemplo

Escape los valores de consulta utilizando el método placholder % s:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="tu usuario",
  passwd="tu contraseña",
  database="tu bbdd"
)

mycursor = mydb.cursor()

sql = "SELECT * FROM clientes WHERE direccion = %s"
adr = ("C/ Samaranch 42", )

mycursor.execute(sql, adr)

myresult = mycursor.fetchall()

for x in myresult:
  print(x)