Integración de Python con SQL Server mediante pymssql

En el aálisis de datos, frecuentemente se requiere acceder a información almacenada en bases de datos. SQL Server es un sistema de gestión de bases de datos relacional ampliamente utilizado, por lo que dominar la conexión de Python a este entorno resulta invaluable. Este artículo detalla el proceso completo para establecer dicha conexión usando la biblioteca pymssql.

Instalación de pymssql

pymssql es una biblioteca de Python que facilita la interacción con bases de datos SQL Server. Su instalación se realiza mediante el gestor de paquetes pip:

pip install pymssql

Configuración de credenciales locales

Establecimiento de la cuenta sa

En SQL Server Management Studio, navegue a la sección de seguriadd y cree un nuevo inicio de sesión. Especifique 'sa' como nombre, seleccione la autenticación de SQL Server y defina una contraseña. Asegúrese de habilitar la cuenta y asignar la base de datos objetivo como predeterminada.

Habilitación de autenticación mixta

Acceda a las propiedades del servidor en SQL Server Management Studio, diríjase a la pestaña de seguridad y cambie el modo de autenticación a mixto (SQL Server y Windows). Aplique los cambios para que surtan efecto.

Activación del protocolo TCP/IP

Use SQL Server Configuration Manager para configurar los protocolos de red. Habilite TCP/IP y defina un puerto estático, como 1433, en la pestaña IPALL. Reinicie el servicio de SQL Server después de guardar las modificaciones.

Establecimiento de conexión mediante script

Una vez completada la configuración, se puede probar la conexión con Python. Si se encuentra un error de tipo 'DB-Lib error message 20002', intente agregar el parámetro tds_version="7.0" en la función de conexión.

import pymssql

servidor_sql = '(local)'
nombre_bd = 'registros_ventas'
credenciales_usuario = 'admin'
clave_acceso = 'segura123'

conexion = pymssql.connect(
    server=servidor_sql,
    user=credenciales_usuario,
    password=clave_acceso,
    database=nombre_bd,
    tds_version="7.0"
)
cursor_sql = conexion.cursor()
print('Conexión establecida con éxito.')
conexion.close()

Función para importación de datos

Para transferir datos desde un DataFrame de pandas a SQL Server, se define una función que maneja la creación de tablas y la inserción masiva. La lógica incluye detección de tipos de datos y soporte para modos de escritura como sobrescritura.

import pymssql
import pandas as pd

def cargar_datos_a_sql(datos_df, servidor, base_datos, usuario, contraseña, tabla_destino, modo_escritura='Reemplazar'):
    conn = pymssql.connect(
        server=servidor,
        user=usuario,
        password=contraseña,
        database=base_datos
    )
    cursor = conn.cursor()
    columnas = list(datos_df.columns)
    tipos_datos = datos_df.dtypes

    if modo_escritura == 'Reemplazar':
        try:
            cursor.execute(f"IF OBJECT_ID('{tabla_destino}', 'U') IS NOT NULL DROP TABLE {tabla_destino}")
        except Exception as e:
            print(f'Error al eliminar tabla: {e}')
        
        sentencia_creacion = f"CREATE TABLE {tabla_destino} ("
        for columna, tipo in zip(columnas, tipos_datos):
            if tipo == 'int64':
                sentencia_creacion += f"{columna} BIGINT,"
            elif tipo == 'float64':
                sentencia_creacion += f"{columna} FLOAT,"
            elif 'datetime' in str(tipo):
                sentencia_creacion += f"{columna} DATETIME2(0),"
            else:
                sentencia_creacion += f"{columna} NVARCHAR(500),"
        sentencia_creacion = sentencia_creacion.rstrip(',') + ")"
        cursor.execute(sentencia_creacion)

    datos_tuplas = [tuple(fila) for fila in datos_df.fillna(0).values]
    placeholders = ','.join(['%s'] * len(columnas))
    columnas_str = ','.join(columnas)
    sentencia_insercion = f"INSERT INTO {tabla_destino} ({columnas_str}) VALUES ({placeholders})"
    cursor.executemany(sentencia_insercion, datos_tuplas)
    conn.commit()
    conn.close()

Etiquetas: pymssql SQL Server Python conexión base de datos importación datos

Publicado el 6-16 20:57