Inicio rápido: Conexión con el controlador mssql-python para Python

En esta guía rápida, conectemos un script de Python a una base de datos que creaste y cargaste con datos de ejemplo. Usas el mssql-python controlador de Python para conectarte a tu base de datos y realizar operaciones básicas, como leer y escribir datos.

El mssql-python controlador no requiere ninguna dependencia externa en máquinas Windows. El controlador instala todo lo que necesita con una sola pip instalación, lo que le permite usar la versión más reciente del controlador para nuevos scripts sin interrumpir otros scripts que no tenga tiempo para actualizar y probar.

Utiliza el ejemplo de autenticación SQL local en este artículo solo para desarrollo local contra una instancia de SQL Server que controles. Para Azure SQL Database, base de datos SQL en Fabric, entornos de desarrollo compartidos, CI y despliegues en producción, empieza con la autenticación Microsoft Entra u otro flujo sin contraseña.

Documentación de mssql-pythonCódigo fuente de mssql-pythonPaquete (PyPI)Visual Studio Code

Prerrequisitos

Crea o conéctate a una base de datos en SQL Server, Azure SQL Database o base de datos SQL en Fabric. Utiliza los siguientes pasos para configurar una base de datos con el AdventureWorks2025 esquema de muestra y conserva la cadena de conexión para más adelante.

Creación de una base de datos SQL

Crea o conéctate a una base de datos SQL en una de las siguientes plataformas:

Configuración

Siga estos pasos para configurar el entorno de desarrollo para desarrollar una aplicación mediante el mssql-python controlador de Python.

Nota:

Este controlador utiliza el protocolo Tabular Data Stream (TDS ). SQL Server, la base de datos SQL en Fabric y Azure SQL Database habilitan TDS por defecto, por lo que no es necesaria ninguna configuración adicional.

Requisitos previos para instalar el sistema operativo

Instale requisitos previos específicos del sistema operativo de un solo uso. Los usuarios de Windows pueden saltarse este paso. Para detalles completos sobre la plataforma, véase Instalar mssql-python.

apk add libtool krb5-libs krb5-dev libstdc++

Instalación del paquete mssql-python

Obtenga el paquete de mssql-python de PyPI.

  1. Abra un símbolo del sistema en un directorio de archivos vacío.

  2. Instale el paquete mssql-python.

    pip install mssql-python
    

Instala el paquete python-dotenv

Obtén el paquete python-dotenv de PyPI.

En el mismo directorio, instale el python-dotenv paquete.

pip install python-dotenv

Compruebe los paquetes instalados

Usa pip list para verificar que los paquetes previstos estén instalados.

pip list

Ejecución del código

Crear un nuevo archivo

  1. Cree un nuevo archivo llamado app.py.

  2. Agregue una docstring de módulo.

    """
    Connects to a SQL database using mssql-python
    """
    
  3. Importe los paquetes, incluido mssql-python.

    from os import getenv
    from dotenv import load_dotenv
    from mssql_python import connect
    
  4. Use la función mssql-python.connect para conectarse a una base de datos SQL.

    load_dotenv()
    conn = connect(getenv("SQL_CONNECTION_STRING"))
    
  5. En el directorio actual, cree un nuevo archivo denominado .env.

  6. En el .env archivo, agregue una entrada para la cadena de conexión denominada SQL_CONNECTION_STRING. Utiliza uno de los siguientes ejemplos y sustituye los marcadores de posición por tus valores reales.

    Para Azure SQL Database o SQL Database en Fabric, comienza con la autenticación de Microsoft Entra:

    SQL_CONNECTION_STRING="Server=<server>;Database=<database>;Encrypt=yes;TrustServerCertificate=no;Authentication=ActiveDirectoryInteractive"
    

    Para SQL Server local durante el desarrollo, empieza con la autenticación SQL:

    SQL_CONNECTION_STRING="Server=localhost,1433;Database=<database>;UID=<user_id>;PWD=<password>;Encrypt=yes;TrustServerCertificate=yes"
    

    Caution

    Trátalo .env como una conveniencia de desarrollo local, no como un mecanismo de despliegue. Nunca lo comprometas, nunca reutilices esta muestra de autenticación SQL en entornos compartidos o de producción, y mantén activada la validación de certificados fuera del desarrollo local.

    Utiliza cadenas de conexión para adaptar la muestra a instancias nombradas, contenedores o configuraciones avanzadas. Si te conectas a Azure SQL Database o SQL Database en Fabric, usa la autenticación Microsoft Entra para opciones de inicio de sesión interactivo y sin contraseña. Para una orientación más amplia sobre secretos y certificados, consulte las mejores prácticas de seguridad.

    Sugerencia

    En macOS, tanto ActiveDirectoryInteractive como ActiveDirectoryDefault funcionan para la autenticación de Microsoft Entra. ActiveDirectoryInteractive le pide que inicie sesión cada vez que ejecute el script. Para evitar que se repitan los prompts de inicio de sesión, inicia sesión una vez con el comando CLI de Azureaz login y utiliza ActiveDirectoryDefault. ActiveDirectoryDefault Reutiliza la credencial almacenada en caché.

Ejecutar una consulta

Utiliza una cadena de consulta Transact-SQL (T-SQL) para ejecutar una consulta y analizar los resultados.

  1. Crea una variable para la cadena de consulta T-SQL.

    SQL_QUERY = """
    SELECT TOP 5
        c.CustomerID,
        c.CompanyName,
        COUNT(soh.SalesOrderID) AS OrderCount
    FROM SalesLT.Customer AS c
    LEFT OUTER JOIN SalesLT.SalesOrderHeader AS soh
        ON c.CustomerID = soh.CustomerID
    GROUP BY
        c.CustomerID,
        c.CompanyName
    ORDER BY OrderCount DESC;
    """
    
  2. Use cursor.execute para recuperar un conjunto de resultados de una consulta en la base de datos.

    cursor = conn.cursor()
    cursor.execute(SQL_QUERY)
    

    Nota:

    Esta función acepta cualquier consulta y devuelve un conjunto de resultados. Para iterar sobre el conjunto de resultados, utiliza cursor.fetchone().

  3. Use cursor.fetchall con un loop for para obtener todos los registros de la base de datos. Luego, imprime los registros.

    records = cursor.fetchall()
    for r in records:
        print(f"{r.CustomerID}\t{r.OrderCount}\t{r.CompanyName}")
    
  4. Guarde el app.py archivo.

  5. Abra un terminal y pruebe la aplicación.

    python app.py
    

    Este es el resultado esperado.

    29485   1       Professional Sales and Service
    29531   1       Remarkable Bike Store
    29546   1       Bulk Discount Store
    29568   1       Coalition Bike Company
    29584   1       Futuristic Bikes
    

Inserte una fila como transacción

Ejecute una INSERT instrucción de forma segura y pase parámetros. Pasar parámetros como valores protege la aplicación frente a ataques por inyección de CÓDIGO SQL .

  1. Agregue una importación para randrange desde la random biblioteca a la parte superior de app.py.

    from random import randrange
    
  2. Al final de app.py agregar código para generar un número de producto aleatorio.

    productNumber = randrange(1000)
    

    Sugerencia

    Un número de producto aleatorio reduce la probabilidad de un error de clave duplicada cuando ejecutas esta muestra más de una vez.

  3. Crea una cadena de instrucción T-SQL.

    SQL_STATEMENT = """
    INSERT SalesLT.Product (
        Name,
        ProductNumber,
        StandardCost,
        ListPrice,
        SellStartDate
    )
    OUTPUT INSERTED.ProductID
    VALUES (%(name)s, %(product_number)s, %(standard_cost)s, %(list_price)s, CURRENT_TIMESTAMP)
    """
    
  4. Ejecute la instrucción mediante cursor.execute.

    cursor.execute(
        SQL_STATEMENT,
        {
            'name': f'Example Product {productNumber}',
            'product_number': f'EXAMPLE-{productNumber}',
            'standard_cost': 100,
            'list_price': 200
        }
    )
    
  5. Capture el único resultado mediante cursor.fetchone, imprima el identificador único del resultado y, a continuación, confirme la operación como una transacción mediante connection.commit.

    result = cursor.fetchone()
    print(f"Inserted Product ID : {result.ProductID}")
    conn.commit()
    

    Sugerencia

    Opcionalmente, puede usar connection.rollback para revertir la transacción.

  6. Cierre el cursor y la conexión mediante cursor.close y connection.close.

    cursor.close()
    conn.close()
    
  7. Guarde el app.py archivo y vuelva a probar la aplicación.

    python app.py
    

    Este es el resultado esperado.

    Inserted Product ID : 1001