Inicio rápido: Implementaciones repetibles con el controlador mssql-python para Python

En esta guía rápida, utilizará uv para administrar las dependencias y entornos del proyecto para un script de Python que se conecta a una base de datos que usted ha creado y cargado con datos de ejemplo. Use el mssql-python controlador para Python para conectarse a la 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.

Documentación de mssql-python | Código fuente de mssql-python | Paquete (PyPI) | uv

Prerrequisitos

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

Creación de una base de datos SQL

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

Creación del proyecto y ejecución del código

Creación de un nuevo proyecto

  1. Abra una ventana del terminal en el directorio de desarrollo. Si no tienes uno, crea un nuevo directorio, como python o scripts. Evita las carpetas en tu OneDrive, ya que la sincronización puede interferir en la gestión de tu entorno virtual.

  2. Cree un proyecto con uv.

    uv init mssql-python-repeatable-qs
    cd mssql-python-repeatable-qs
    

Agregar dependencias

En el mismo directorio, instale los mssql-pythonpaquetes , python-dotenvy rich .

uv add mssql-python python-dotenv rich

Iniciar Visual Studio Code

En el mismo directorio, ejecute el siguiente comando.

code .

Actualizar pyproject.toml

  1. Pyproject.toml contiene los metadatos del proyecto. Abra el archivo en su editor favorito.

  2. Revise el contenido del archivo. Debe ser similar a este ejemplo. Ten en cuenta la versión de Python y las dependencias para mssql-python; usa >= para definir una versión mínima. Si prefiere una versión exacta, cambie el >= valor anterior al número de versión a ==. Las versiones resueltas de cada paquete se almacenan en el uv.lock. El lockfile garantiza que los desarrolladores que trabajan en el proyecto utilicen versiones de paquetes consistentes. También garantiza que se use el mismo conjunto exacto de versiones de paquete al distribuir el paquete a los usuarios finales. Confirma tanto pyproject.toml como uv.lock, revisa los cambios en lockfile en pull requests, y ejecuta un escáner de dependencias aprobado por la organización en CI. No edites el uv.lock archivo directamente.

    [project]
    name = "mssql-python-repeatable-qs"
    version = "0.1.0"
    description = "Add your description here"
    readme = "README.md"
    requires-python = ">=3.11"
    dependencies = [
        "mssql-python>=0.10.0",
        "python-dotenv>=1.1.1",
        "rich>=14.1.0",
    ]
    
  3. Actualice la descripción para que sea más descriptivo.

    description = "Connects to a SQL database using mssql-python"
    
  4. Guarde y cierre el archivo.

Actualizar main.py

  1. Abra el archivo denominado main.py. Debe ser similar a este ejemplo.

    def main():
        print("Hello from mssql-python-repeatable-qs!")
    
    if __name__ == "__main__":
        main()
    
  2. En la parte superior del archivo, añade las siguientes importaciones antes de la línea con def main().

    Sugerencia

    Si Visual Studio Code tiene problemas para resolver los paquetes, debe actualizar el intérprete para usar el entorno virtual.

    from os import getenv
    from dotenv import load_dotenv
    from mssql_python import connect, Connection, Cursor
    from rich.console import Console
    from rich.progress import Progress, SpinnerColumn, TextColumn
    from rich.table import Table
    from argparse import ArgumentParser
    from time import sleep
    
  3. Entre las importaciones y la línea con def main(), agregue el código siguiente.

    def get_results(sleep_time: int = 0) -> None:
     with Progress(
         SpinnerColumn(),
         TextColumn("[progress.description]{task.description}"),
         transient=True,
     ) as progress:
         task = progress.add_task(
             description="Connecting to SQL...")
    
         cursor = query_sql()
    
         # Simulate a slow connection for demo purposes
         sleep(sleep_time)
    
         progress.update(task, description="Formatting results...")
    
         table = Table(title="Orders by Customer")
         # https://rich.readthedocs.io/en/stable/appendix/colors.html
         table.add_column("Customer ID", style="bright_blue", justify="center")
         table.add_column("Company Name", style="bright_white", justify="left")
         table.add_column("Order Count", style="bold green", justify="right")
    
         records = cursor.fetchall()
         for r in records:
             table.add_row(f"{r.CustomerID}",
                           f"{r.CompanyName}", f"{r.OrderCount}")
    
         if cursor:
             cursor.close()
    
         # Simulate a slow connection for demo purposes
         sleep(sleep_time)
    
         progress.stop()
    
         Console().print(table)
    
  4. Entre las importaciones y def get_results(sleep_time: int = 0) -> None:, agregue este código.

    _connection = None
    
    def get_connection() -> Connection:
       global _connection
       if not _connection:
           load_dotenv()
           _connection = connect(getenv("SQL_CONNECTION_STRING"))  # type: ignore
       return _connection
    
    def query_sql() -> Cursor:
    
       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;
       """
    
       conn = get_connection()
       cursor = conn.cursor()
       cursor.execute(SQL_QUERY)
       return cursor
    
  5. Busque este código.

    def main():
        print("Hello from mssql-python-repeatable-qs!")
    
  6. Reemplácelo por este código.

    def main() -> None:
       parser = ArgumentParser()
       parser.add_argument("--sleep-time", type=int, default=0,
                           help="Time to sleep in seconds to simulate slow connection")
       args = parser.parse_args()
    
       if args.sleep_time > 0:
           get_results(args.sleep_time)
       else:
           get_results()
    
       if _connection:
           _connection.close()
    
  7. Guarde y cierre main.py.

Guardar la cadena de conexión

  1. Abra el .gitignore archivo y agregue una exclusión para .env los archivos. El archivo debe ser similar a este ejemplo. Asegúrese de guardarlo y cerrarlo cuando haya terminado.

    # Python-generated files
    __pycache__/
    *.py[oc]
    build/
    dist/
    wheels/
    *.egg-info
    
    # Virtual environments
    .venv
    
    # Connection strings and secrets
    .env
    
  2. En el directorio actual, cree un nuevo archivo denominado .env.

  3. En el .env archivo, agregue una entrada para la cadena de conexión denominada SQL_CONNECTION_STRING. Reemplace el ejemplo aquí por el valor real de la cadena de conexión.

    SQL_CONNECTION_STRING="Server=<server_name>;Database=<database_name>;Encrypt=yes;TrustServerCertificate=no;Authentication=ActiveDirectoryInteractive"
    

    Importante

    Mantén .env en local y fuera del control de versiones. Para entornos de CI y entornos implementados, inyecta la cadena de conexión o los secretos de sus componentes desde el almacén de secretos de tu plataforma en lugar de copiar .env entre máquinas.

    Sugerencia

    La cadena de conexión que se usa aquí depende en gran medida del tipo de base de datos SQL a la que se conecta. Si se conecta a una base de datos de Azure SQL o a una base de datos SQL en Fabric, use la cadena de conexión ODBC de la pestaña Cadenas de conexión. Es posible que tenga que ajustar el tipo de autenticación en función de su escenario. Para obtener más información sobre las cadenas de conexión y su sintaxis, consulte referencia de sintaxis de cadena de conexión.

Usa uv run para ejecutar el script

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 las indicaciones de inicio de sesión, inicia sesión una vez a través de la CLI de Azure ejecutando az login, y luego usa ActiveDirectoryDefault, que reutiliza la credencial almacenada en caché.

  1. En la ventana de terminal desde antes o una nueva ventana de terminal abierta en el mismo directorio, ejecute el siguiente comando.

     uv run main.py
    
  2. Ahora vamos a ejecutarlo de nuevo, pero más lentamente para poder ver ambas actualizaciones de estado.

     uv run main.py --sleep-time 5
    

    Esta es la salida esperada cuando se completa el script.

                             Orders by Customer
    ┏━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┓
    ┃ Customer ID ┃ Company Name                   ┃ Order Count ┃
    ┡━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━┩
    │    29485    │ Professional Sales and Service │           1 │
    │    29531    │ Remarkable Bike Store          │           1 │
    │    29546    │ Bulk Discount Store            │           1 │
    │    29568    │ Coalition Bike Company         │           1 │
    │    29584    │ Futuristic Bikes               │           1 │
    └─────────────┴────────────────────────────────┴─────────────┘
    
  3. Para desplegar tu script en otra máquina, copia los archivos del proyecto, incluyendo pyproject.toml y uv.lock, pero no la .venv carpeta ni ningún archivo local .env . Recrea el entorno virtual en la primera partida y proporciona secretos a través del entorno objetivo.

Pasos siguientes

Utiliza estos artículos para seguir creciendo:

  • Crea cadenas de conexión para configurar conexiones para diferentes tipos de bases de datos SQL y métodos de autenticación.
  • Ejecutar consultas para aprender sobre patrones de consulta, consultas parametrizadas y manejo de resultados.
  • Gestión de conexiones para usar gestores de contexto, pooling y ajustes de conexión.