Blog
Acceso a Bases de Datos desde Python con pyodbc
- Publicado por: Rafael Fernandez
- Categoría: Blog
ODBC
Open DataBase Connectivity (ODBC) es un estándar de acceso a las bases de datos desarrollado por SQL Access Group (SAG) en 1992. El objetivo de ODBC es hacer posible el acceder a cualquier dato desde cualquier aplicación, sin importar qué sistema de gestión de bases de datos (DBMS) almacene los datos.
Para desarrollar un proyecto en Python en el que se quiera implementar el uso de Bases de Datos SQL, se tienen distintos módulos que pueden ser útiles. pyodbc es uno de ellos.
pyodbc
pyodbc es un módulo de Python de código abierto que simplifica el acceso a las bases de datos ODBC desde Python, implementando el uso de la DB API 2.0 de una forma conveniente para Python. pyodbc también es considerado como un controlador SQL para Python.
Una base de datos es un modelo informático compuesto por un conjunto de datos pertenecientes a un mismo contexto y almacenados de forma ordenada para su posterior uso. Este modelo es sumamente utilizado en la actualidad para el desarrollo de proyectos computacionales. Entre las mas utilizadas, se encuentran las bases de datos SQL, que son desarrolladas con el lenguaje de programación SQL (Structured Query Language).
Instalar pyodbc
Para instalar pyodbc se utiliza el instalador de paquetes de Python, pip, desde la terminal del sistema, con la siguiente linea de código:
pip install pyodbc
Esto es igual para cualquier sistema. Se puede comprobar que el módulo fue instalado de forma correcta iniciando la terminal de Python e importando el módulo con import.
>> import pyodbc
Si no arroja ningún error, entonces el paquete fue instalado de forma correcta
Uso de pyodbc con SQL
pyodbc es utilizado principalmente para desarrollar scripts en Python para consultar, manejar y editar bases de datos.
Conexión al servidor SQL:
import pyodbc ''' Otros posibles nombres de servidores pueden ser servidor = 'localhost\sqlexpress' # para casos específicos servidor = 'miservidor,puerto' # para especificar un puerto alterno ''' servidor = 'puerto:servidor.base.sql' # Nombre del servidor SQL con el cual se hará la conexión bddatos = 'mibdd' # Nombre de la base de datos SQL usuario = 'username' # Nombre del usuario de SQL clave = 'clave' # Contraseña del usuario de SQL conn = pyodbc.connect('DRIVER={Controlador ODBC para el servidor SQL}; SERVER='+servidor+'; DATABASE='+bddatos+'; UID='+usuario+'; PWD='+clave) ''' pyodbc.connect() inicia la conexión con el servidor SQL tomando como argumentos, en orden,: - El nombre del controlador SQL - El servidor al cual se hará la conexión - El nombre de la Base de datos que será consultada - El nombre de usuario que tiene acceso a la base de datos - La contraseña del usuario que accede a la base de datos ''' cursor = conn.cursor() # se crea el cursor para la conexión
Cursor
Un cursor en una base de datos es el objeto que es utilizado para manejar el contexto de una operación de consulta.
Métodos de los cursores
execute()
Con la función ‘execute(sql,*parametros)’ se ejecuta expresión SQL especificada en el primer argumento, tomando en cuenta los parámetros especificados en el segundo argumento. Siempre devuelve el mismo cursor. Ejemplo:
import pyodbc conn = pyodbc.connect('DRIVER={Controlador ODBC para el servidor SQL}; SERVER='+servidor+'; DATABASE='+bddatos+'; UID='+usuario+'; PWD='+clave) cursor = conn.cursor() cursor.execute('select * from tracking_sales') # Se genera el cursor con el criterio # de búsqueda o query for fila in cursor.fetchall(): print(row)
fetchone()
Devuelve la siguiente fila disponible en el query, o ‘None’ en el caso de que no queden datos disponibles. En caso de que no se haya ejecutado ningún SQL.
cursor.execute("select user_name from users where user_id=?", userid) row = cursor.fetchone() if fila: print(fila.user_name)
fetchall()
Devuelve una lista con todas las filas disponibles en el query.
cursor.execute("select user_id, user_name from users where user_id < 100") rows = cursor.fetchall() for fila in filas: print(fila.user_id, fila.user_name)
commit()
Guarda los cambios hechos a la base de datos.
Uso de pyodbc con Microsoft Access
Existen dos controladores ODBC para Access oficiales. Estos son:
- Microsoft Access Driver (*.mdb): Es la version antigua de 32 bits de los controladores ODBC. Está incluida como estándar en las instalaciones de Windows. Funciona solo con los archivos .mdb. Está oficialmente descontinuado.
- Microsoft Access Driver (*.mdb,*.accdb): Es la nueva versión de los controladores ODBC para Access. No está incluido con Windows, pero está incluido generalmente en la instalación de Microsoft Office. También está disponible el paquete de instalación independiente para los equipos que no tengan Office.
La forma mas adecuada de comprobar cual controlador se tiene disponible, es desde la terminal de Python:
>>> import pyodbc >>> [x for x in pyodbc.drivers() is x.startswith('Microsoft Access Driver')]
De esta forma se obtiene el nombre del controlador ODBC para Access instalado.
Conexión con base de datos Access desde Python
import pyodbc conn = pyodbc.connect('DRIVER={Microsoft Access Driver (*.mdb,*.accdb)}; DBQ=C:\ruta\base\de\datos;') cursor = conn.cursor() # Se crea el cursor for fila in cursor.fetchall(): print(fila) # Se imprimen las filas de la base de datos
Con pyodbc.connect() se inicia la conexión a la base de datos. Recibe como parámetros el nombre del controlador ODBC y la ruta en donde se encuentra la base de datos .mdb o .accdb.
Al igual que con a una base de datos SQL, las operaciones se hacen con el cursor y los métodos del cursor (execute, fetchall, fetchone, commit).
Es importante destacar que pyodbc es como una extensión a sqlite que viene integrado a python, ya que utilizan prácticamente la misma sintaxis y que además de eso posee soporte para otros tipos de bases de datos.