BorrowBits - ciencia y tecnología

Maneja tu base de datos SQL con Python

pythonUna de las principales herramientas en muchas empresas es el paquete Office de Microsoft. Este paquete aparte de incluir herramientas tan conocidas como Word o Excel, tienen un gestor de base de datos, también muy conocido, llamado Access. Permite la gestión y consulta de bases de datos mediante interfaz gráfica editable. En mi trabajo, por necesidades de proyecto, tengo que utilizar una base de datos en Access, tanto para añadir nuevos registros como para realizar consultas masivas en la misma.

Si estas familiarizado con las bases de datos y sentencias SQL, podrás acceder a esta base de datos sin necesidad de utilizar como IDE a Microsoft Access, ya que a través del estándar ODBC (Open DataBase Connectivity) podemos conectarnos, incluso desde otros sistemas operativos diferentes a Windows.

Gracias a ODBC, no importa qué motor de base de datos se utilice, ya que el sistema de acceso es independiente. Simplemente hay que indicar el controlador específico para la base de datos.

Para usar ODBC para conectarnos con nuestra base de datos desde Windows, Linux u otro sistema operativo, necesitamos el módulo de Python pyodbc.  Con él podremos añadir registros, realizar consultas, eliminar elementos, etc. Visita su página de descargas e instala aquella que concuerde con tu sistema operativo y con la arquitectura de tu equipo.

¿Cómo implementarlo en Python? Veamos un ejemplo con una base de datos de frutas:

#!/usr/bin/python
# -*- coding: cp1252 -*-

 # devuelve la ruta actual completa.
from os import getcwd

 # módulo para BBDD SQL
import pyodbc

 # Nombre del controlador de la base de datos Access.
DRIVER_NAME = "Microsoft Access Driver (*.mdb, *.accdb)"

 # Ruta completa de la base de datos.
DB_PATH = getcwd() + "\MiBDdeFrutas.accdb"

 # Establecer la conexión con BD.
conn = pyodbc.connect("Driver={%s};DBQ=%s;" % (DRIVER_NAME, DB_PATH))

 # Crear cursor para ejecutar consultas.
cursor = conn.cursor()

 # Agregar una fruta en nuestra base de datos:
nombre = "Platano"
calorias = "90"
origen = "Canarias"
color="amarillo"
# Ejecutar sentencia:
cursor.execute("INSERT INTO frutas (nombre, calorias, origen) VALUES (?, ?, ?)", nombre, calorias, origen)

# Guardar los cambios.
cursor.commit()

# Ejecutar consulta:
q = cursor.execute("SELECT * FROM frutas WHERE color = 'amarillo'")
rows = q.fetchall()

# Recorrer cada una de las filas e imprimirlas en pantalla.
if rows is not None:
   for row in rows:
       print "Nombre: %s | Calorias: %s" % (row.nombre, row.calorias)
else:
   print("No hay datos en la tabla.")

# Cerrar cursor
cursor.close()

# Cerrar conexion
conn.close()

Vemos que hay que especificar la ruta completa del archivo de la base de datos y el controlador correspondiente de nuestra base de datos Access. Creamos una conexión para gestionar la base de datos y un cursor para realizar las consultas necesarias a la misma. El cursor nos permite ejecutar las sentencias SQL que queramos.

Con cursor.execute(), por medio de signos de interrogación podemos pasar los valores correspondientes, evitando el formateo de cadenas y las vulnerabilidades en código, como por ejemplo SQLi.

Si necesitas hacer consultas masivas con un gran volumen de datos, hacer un script con Python puede facilitar mucho la tarea.

¿Cómo utilizas pyodbc? Cuéntanoslo.

Rafa M.

Ingeniero de Telecomunicación, apasionado de la Seguridad Informática.

3 comentarios

  • Buenas, estaba buscando esto que comentas, pero un poco distinto:

    Se programar en BASH y hago muchas maravillas pero estoy empezando en django y python.

    Estoy buscando algo que haciendo un bucle mire toda una base de datos y revise los valores, …si se cumple la condición lanza un script en 2º plano, ….y así con todas las filas, ….el ejemplo es este:

    Sólo necesito que en una base de datos hayan 3 filas, cada una con un valor, …y que revise esas 3 filas de la base de datos (que ya será más grande), …un usuario con 500, otro con 600 y otro con 700, …

    Y el valor para comparar lo mira en un TXT, …imaginando 550, ….si es menor de 550 lanza un comando en 2º plano que corresponde a la fila que tiene el valor 500.

    Parto de 0 en django y python, y quisiera tener una base.

    Un saludo y muchas gracias

    • file = open(“archivo.txt”, “r”)
      valor = int(file.read())

      if (valor < 550): consulta = ...#consulta DB cuyas columna x < 550 for linea in consulta: #operacion con cada linea que cumpla tu condicion

Suscríbete

¡Sácale el máximo partido a BBits!

Introduce tu dirección de correo electrónico para seguir este Blog y recibir por email las nuevas publicaciones, si has leído y aceptas las Políticas de Privacidad, Cookies y Aviso Legal.

Recíbelo gratis al suscribirte

Webs amigas

  • Frikilogia.- Blog Multi-Tematico orientado a todos los campos del frikismo.
  • Meridiem90.tv.- Mira la TV gratis en HD. Canal Plus y Gol TV, todo el futbol desde tu navegador.
  • JITKey.- Startup enfocada en la gestión de alojamientos turísticos.

Bits del pasado

Síguenos en FB