python

Conexión a SQL Server con Python y PyODBC (CRUD)

En este post vamos a conectar Python 3 a una base de datos de SQL Server a través del driver ODBC y el paquete PyODBC.

Haremos un CRUD para demostrar cómo se hacen las 4 operaciones básicas a una base de datos.

Para comenzar, recuerda:

Conectar SQL Server con Python usando PyODBC – CRUD

Nota: todos los archivos están en un repositorio de GitHub.

Instalación de PyODBC

Cuando ya hayas instalado pip, instala el paquete PyODBC con el comando:

pip install pyodbc

Como se ve en la imagen:

1 – Instalar PyODBC

Base de datos

La base de datos que vamos a consumir se llama “pruebas_parzibyte” y la tabla será una tabla de películas; tu base de datos puede ser llamada como quieras.

See the gist on github.

Dentro de la tabla se declara una columna autoincrementable.

Recuerda que es un ejemplo, ya que en tu caso serán otras tablas y datos, pero recomiendo crear la tabla que se muestra aquí para que sigas el tutorial.

Crear tabla en base de datos

Ahora por favor comprueba tus credenciales; tanto el usuario, contraseña, nombre de base de datos y nombre de las tablas; todo esto usando SQL Server Management Studio para descartar posibles errores al trabajar con Python.

Probar conexión a SQL Server desde Python

Comencemos a programar. Vamos a crear un archivo de conexión en Python y luego lo vamos a importar en los lugares en donde lo vayamos a usar.

En este archivo pondremos las credenciales y rutas del servidor, así como el nombre de la base de datos:

See the gist on github.

Estamos importando a pyodbc y declarando la variable conexión. Si la misma es exitosa, no se generará un error, y en caso de que sí, lo vamos a atrapar.

Cambia las credenciales y prueba la conexión ejecutando el archivo (python bd.py) y si no se genera ningún error, todo va bien.

Insertar datos

Para insertar datos debemos obtener el cursor de la conexión, eso lo hacemos con conexion.cursor().

Utilizamos with para que el cursor se cierre automáticamente.

Para ejecutar la consulta llamamos a cursor.execute(consulta, datos).

See the gist on github.

Fíjate en que, dentro de la consulta, no concatenamos los datos, sino que los indicamos con un signo de interrogación y luego los pasamos en el mismo orden dentro de la tupla en el segundo argumento a cursor.execute.

Al utilizar los placeholders o signos de interrogación, evitamos inyecciones SQL.

En el finally, la conexión debe ser cerrada, sin importar si hubo éxito o error en la inserción.

Consultar datos

Para traer los datos en forma de arreglo necesitamos de nuevo, el cursor.

La consulta se hace a través de cursor.execute(consulta), y se pueden pasar datos como cuando insertamos datos.

La diferencia ahora es que para traer los datos de la consulta como arreglo usamos a cursor.fetchall() que devuelve una lista, la cual podemos iterar, codificar con json, etcétera.

See the gist on github.

En este caso estamos imprimiendo el resultado completo; si quisieras acceder a un valor de la fila simplemente accede a ese elemento de la lista. Por ejemplo, print(pelicula[0]) imprimiría el id.

A continuación veremos cómo iterar los resultados en lugar de tenerlos como arreglo, un método útil para cuando queremos optimizar los resultados, o cuando hay varios datos.

Iterar resultado de consulta

Para no tener los datos en un arreglo, pero recorrerlos de igual manera, hacemos un ciclo while.

El ciclo se cumplirá mientras cursor.fetchone() regrese algo.

See the gist on github.

De esta manera se pueden procesar miles de datos sin sacrificar el rendimiento.

Consultar con cursor

Consultar usando where

Se pueden pasar argumentos en cursor.execute también a las consultas. Por ejemplo, para pasar un dato que formará una condicional se hace lo siguiente:

See the gist on github.

En este caso vamos a consultar las películas cuyo año de estreno sea mayor al 2000. Esta variable puede venir de cualquier lado, la pongo directamente en el código para ejemplificar.

Estamos usando placeholders para evitar inyecciones SQL.

Consulta con where – Python y SQL Server

Consultar usando where y Like

Una pregunta muy común es cómo escapar una consulta con Like y los comodines.

La solución es poner un simple placeholder, y concatenar los comodines a la cadena o búsqueda; así se siguen evitando inyecciones SQL.

See the gist on github.

Recuerda que se puede usar fetchall o iterar los datos en un while, todo depende de lo que quieras hacer.

Consulta con where y Like en SQL Server con Python

Editar datos

Para editar hay que hacer una simple consulta y pasar los parámetros necesarios.

See the gist on github.

Se pueden actualizar todos los datos o solo uno; y la consulta puede llevar una o más condiciones, al final todo depende de SQL y no tanto de Python; pues Python solo pasa los datos al motor.

Eliminar datos

Para terminar veamos cómo eliminar datos, usando de nuevo a execute y pasando argumentos que remplazan a los placeholders para evitar inyecciones SQL.

See the gist on github.

Conclusión

Hemos visto cómo hacer las operaciones básicas en una base de datos de SQL Server a través de Python y el paquete PyODBC.

Recuerda que son ejemplos simples para no confundir al lector, ya que los datos podrían venir de cualquier lugar, por ejemplo, un formulario web o el teclado del usuario, etcétera.

En todos los ejemplos hemos prevenido inyecciones SQL.

Si usas PHP posiblemente quieras ver este post.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

JavaScript (lado del cliente): leer pixeles de imagen

En ocasiones es necesario leer los pixeles y colores de una imagen con JavaScript del…

5 días hace

PHP y JavaScript: llenar select con AJAX

Siguiendo con los tutoriales de listas desplegables o select con JavaScript, vamos a ver cómo…

5 días hace

Imprimir PDF generado con HTML

Hoy vamos a ver programar la impresión de un PDF generado a partir de HTML…

6 días hace

JavaScript: llenar select con arreglo

En este tutorial básico de JavaScript con HTML vamos a ver cómo llenar una lista…

2 semanas hace

Imprimir PDF a partir de URL

En este artículo se presenta una guía para imprimir un PDF a partir de una…

2 semanas hace

Imprimir PDF a partir de base64

En este post voy a enseñarte cómo imprimir un PDF a partir de su representación…

2 semanas hace

Esta web usa cookies.