Démarrage rapide : Déploiements reproductibles avec le pilote mssql-python pour Python

Dans ce guide de démarrage rapide, vous utilisez uv pour gérer les dépendances de projet et les environnements pour le script Python qui se connecte à une base de données que vous avez créée et chargée avec des exemples de données. Vous utilisez le mssql-python pilote pour Python pour vous connecter à votre base de données et effectuer des opérations de base, telles que la lecture et l’écriture de données.

Le mssql-python pilote ne nécessite aucune dépendance externe sur les machines Windows. Le pilote installe tout ce dont il a besoin avec une seule pip installation, ce qui vous permet d’utiliser la dernière version du pilote pour les nouveaux scripts sans interrompre d’autres scripts que vous n’avez pas le temps de mettre à niveau et de tester.

documentation | code | Package (PyPI) | Uv

Prerequisites

Installez les prérequis ponctuels spécifiques au système d'exploitation. Les utilisateurs Windows peuvent sauter cette étape. Pour tous les détails sur la plateforme, voir Installer mssql-python.

apk add libtool krb5-libs krb5-dev

Créer une base de données SQL

Créer ou connecter une base de données SQL sur l’une des plateformes suivantes :

Créer le projet et exécuter le code

Créer un projet

  1. Ouvrez une invite de commandes dans votre répertoire de développement. Si vous n’en avez pas, créez un nouveau répertoire, tel que python ou scripts. Évitez les dossiers sur votre OneDrive, car la synchronisation peut interférer avec la gestion de votre environnement virtuel.

  2. Créez un projet avec uv.

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

Ajouter des dépendances

Dans le même répertoire, installez les packages mssql-python, python-dotenv et rich.

uv add mssql-python python-dotenv rich

Lancer Visual Studio Code

Dans le même répertoire, exécutez la commande suivante.

code .

Mettre à jour pyproject.toml

  1. Pyproject.toml contient les métadonnées de votre projet. Ouvrez le fichier dans votre éditeur favori.

  2. Passez en revue le contenu du fichier. Il doit être similaire à cet exemple. Indiquez la version de Python et la dépendance pour mssql-python ; utilisez >= pour définir une version minimale. Si vous préférez une version exacte, changez le >= avant le numéro de version en ==. Les versions retenues de chaque paquet sont enregistrées dans le uv.lock. Le fichier verrouillé garantit que les développeurs travaillant sur le projet utilisent des versions cohérentes des paquets. Il garantit également que le même ensemble de versions de package est utilisé lors de la distribution de votre package aux utilisateurs finaux. Validez à la fois pyproject.toml et uv.lock, examinez les modifications de fichiers verrouillés dans les pull requests, et exécutez un scanner de dépendances approuvé par l’organisation dans CI. Ne modifie pas directement le uv.lock fichier.

    [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. Mettez à jour la description pour être plus descriptive.

    description = "Connects to a SQL database using mssql-python"
    
  4. Enregistrez et fermez le fichier.

Mettre à jour main.py

  1. Ouvrez le fichier nommé main.py. Il doit être similaire à cet exemple.

    def main():
        print("Hello from mssql-python-repeatable-qs!")
    
    if __name__ == "__main__":
        main()
    
  2. En haut du fichier, ajoutez les importations suivantes avant la ligne avec def main().

    Conseil / Astuce

    Si Visual Studio Code rencontre des difficultés pour résoudre les packages, vous devez mettre à jour l’interpréteur pour utiliser l’environnement virtuel.

    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 les importations et la ligne avec def main(), ajoutez le code suivant.

    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 les importations et def get_results(sleep_time: int = 0) -> None:, ajoutez ce code.

    _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. Recherchez ce code.

    def main():
        print("Hello from mssql-python-repeatable-qs!")
    
  6. Remplacez-le par ce code.

    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. Enregistrez et fermez main.py.

Enregistrer la chaîne de connexion

  1. Ouvrez le .gitignore fichier et ajoutez une exclusion pour .env les fichiers. Votre fichier doit être similaire à cet exemple. Veillez à l’enregistrer et à le fermer lorsque vous avez terminé.

    # Python-generated files
    __pycache__/
    *.py[oc]
    build/
    dist/
    wheels/
    *.egg-info
    
    # Virtual environments
    .venv
    
    # Connection strings and secrets
    .env
    
  2. Dans le répertoire actif, créez un fichier nommé .env.

  3. Dans le .env fichier, ajoutez une entrée pour votre chaîne de connexion nommée SQL_CONNECTION_STRING. Remplacez l’exemple ici par votre valeur de chaîne de connexion réelle.

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

    Important

    Gardez .env en local et hors de la gestion de version. Pour les environnements CI et déployés, injectez la chaîne de connexion ou les secrets qui la composent depuis le magasin de secrets de votre plateforme au lieu de copier .env d’une machine à l’autre.

    Conseil / Astuce

    La chaîne de connexion utilisée ici dépend en grande partie du type de base de données SQL à laquelle vous vous connectez. Si vous vous connectez à une base de données Azure SQL ou à une base de données SQL dans Fabric, utilisez la chaîne de connexion ODBC à partir de l’onglet chaînes de connexion. Vous devrez peut-être ajuster le type d’authentification en fonction de votre scénario. Pour plus d’informations sur les chaînes de connexion et leur syntaxe, consultez la référence de la syntaxe des chaînes de connexion.

Utilisez uv run pour exécuter le script

Conseil / Astuce

Sur macOS, les deux ActiveDirectoryInteractive et ActiveDirectoryDefault fonctionnent pour l’authentification Microsoft Entra. ActiveDirectoryInteractive vous invite à vous connecter chaque fois que vous exécutez le script. Pour éviter les demandes de connexion répétées, connectez-vous une fois via l’interface Azure CLI en exécutant az login, puis utilisez ActiveDirectoryDefault, qui réutilise l’identifiant mis en cache.

  1. Dans la fenêtre de terminal à partir de l’avant, ou une nouvelle fenêtre de terminal ouverte au même répertoire, exécutez la commande suivante.

     uv run main.py
    
  2. Nous allons maintenant l’exécuter à nouveau, mais plus lentement pour pouvoir voir les deux mises à jour d’état.

     uv run main.py --sleep-time 5
    

    Voici la sortie attendue lorsque le script est terminé.

                             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. Pour déployer votre script sur une autre machine, copiez les fichiers du projet, y compris pyproject.toml et uv.lock, mais pas le .venv dossier ni aucun fichier local .env . Recréer l’environnement virtuel dès la première exécution et fournir les secrets via l’environnement cible.

Étapes suivantes

Utilisez ces articles pour continuer à construire :

  • Créez des chaînes de connexion pour configurer les connexions pour différents types de bases de données SQL et méthodes d’authentification.
  • Exécution de requêtes pour apprendre les schémas de requête, les requêtes paramétrées et la gestion des résultats.
  • Gestion de connexion pour utiliser des gestionnaires de contexte, le pooling et les paramètres de connexion.