(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Cómo conectar Python a SQL Server con pyodbc

João Barros 05 de July de 2026 5 min de lectura

Conectar Python a SQL Server es una de las tareas más comunes para quien trabaja con datos en la plataforma Microsoft: permite leer tablas, ejecutar consultas y traer los resultados directamente a un DataFrame de pandas. La forma más fiable de lograrlo es la biblioteca pyodbc, que se apoya en el driver ODBC oficial de Microsoft. A continuación mostramos, paso a paso, cómo montar esta conexión desde cero, con ejemplos listos para usar y los errores más comunes que conviene evitar.

Requisitos previos

  • Python 3.9 o superior instalado en su sistema.
  • Acceso a una instancia de SQL Server (local, en una VM o en Azure SQL) y sus credenciales.
  • El Microsoft ODBC Driver 18 for SQL Server (o la versión más reciente) instalado en el sistema operativo.
  • Permisos para ejecutar pip install en su entorno de Python.

Paso 1: Instalar la biblioteca pyodbc

Empiece por instalar el paquete en su entorno. Si utiliza entornos virtuales —lo recomendable—, actívelo primero y solo después ejecute el comando.

pip install pyodbc pandas

El pyodbc se encarga de la comunicación con SQL Server y pandas recibirá los datos en formato tabular. Atención: el driver ODBC en sí no se instala con pip — es un componente del sistema operativo que debe descargar del sitio de Microsoft.

Paso 2: Confirmar que el driver ODBC está disponible

Antes de conectar, confirme que Python "ve" el driver. Este pequeño ejemplo lista todos los drivers ODBC instalados en la máquina.

import pyodbc

for driver in pyodbc.drivers():
    print(driver)

En la salida debe aparecer una línea como ODBC Driver 18 for SQL Server. Si la lista sale vacía o sin ningún driver de SQL Server, instálelo antes de continuar — es la causa número uno del error "Data source name not found".

Paso 3: Crear la conexión a SQL Server

La conexión se define con una connection string que incluye el driver, el servidor, la base de datos y las credenciales. Guarde la contraseña fuera del código, por ejemplo en una variable de entorno, y nunca la deje escrita en el archivo.

import os
import pyodbc

conn_str = (
    "DRIVER={ODBC Driver 18 for SQL Server};"
    "SERVER=localhost,1433;"
    "DATABASE=Vendas;"
    "UID=leitor;"
    "PWD=" + os.environ["SQL_PWD"] + ";"
    "Encrypt=yes;"
    "TrustServerCertificate=yes;"
)

conn = pyodbc.connect(conn_str)
print(conn.getinfo(pyodbc.SQL_DBMS_NAME))

Algunos puntos importantes: en el driver 18, Encrypt=yes es el valor por defecto y una buena práctica de seguridad. Use TrustServerCertificate=yes solo en desarrollo, con certificados autofirmados; en producción prefiera un certificado válido y TrustServerCertificate=no. Para autenticación integrada de Windows, sustituya UID y PWD por Trusted_Connection=yes.

Paso 4: Ejecutar una consulta y leer los resultados

Con la conexión abierta, cree un cursor para ejecutar comandos SQL. Use siempre parámetros (el ?) en lugar de concatenar valores en la consulta — es lo que protege la aplicación de la inyección de SQL.

cursor = conn.cursor()

cursor.execute(
    "SELECT TOP 5 id, cliente, total FROM dbo.Encomendas WHERE total > ?",
    100,
)

for row in cursor.fetchall():
    print(row.id, row.cliente, row.total)

El método fetchall() devuelve todas las filas de una vez; en tablas grandes, recorra el cursor directamente o use fetchmany() para ahorrar memoria.

Paso 5: Llevar los datos a un DataFrame de pandas

Para el análisis, lo más práctico es cargar el resultado directamente en un DataFrame. La función read_sql de pandas acepta la consulta y la conexión pyodbc.

import pandas as pd

df = pd.read_sql("SELECT * FROM dbo.Encomendas", conn)
print(df.head())
print(len(df))

conn.close()

Cierre siempre la conexión al final con conn.close(), o ábrala dentro de un bloque with para que Python la cierre automáticamente.

Verificar el resultado

Si todo fue bien, al ejecutar el script del Paso 3 se imprime el nombre del SGBD — Microsoft SQL Server — y, en los pasos siguientes, las primeras filas de la tabla en el terminal. Para confirmar que los valores son correctos, compárelos con el resultado de la misma consulta en SQL Server Management Studio o Azure Data Studio. Si recibe el error "Login failed for user", revise las credenciales; si es "server was not found", compruebe el nombre del servidor, el puerto y si el firewall permite la conexión.

Conclusión

Con pocas líneas de código, Python ya puede leer y escribir en SQL Server, abriendo la puerta a automatizar informes, alimentar modelos de machine learning o construir pipelines de datos. El siguiente paso natural es parametrizar la connection string por entorno y probar SQLAlchemy, que se apoya en pyodbc y simplifica la escritura de DataFrames de vuelta a la base de datos. ¿Qué consulta de su día a día le gustaría automatizar primero?