Partager via


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


Créer une base de données SQL

Ce guide de démarrage rapide nécessite le schéma Léger AdventureWorks2025, sur Microsoft SQL Server, une base de données SQL dans Fabric ou une base de données Azure SQL.

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 répertoire appelé python, scriptsetc. Évitez les dossiers sur votre OneDrive, 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. Notez la version et la dépendance Python car mssql-python utilise >= 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 résolues de chaque package sont ensuite stockées dans uv.lock. Le fichier de verrouillage garantit que les développeurs travaillant sur le projet utilisent des versions de package cohérentes. Il garantit également que le même ensemble de versions de package est utilisé lors de la distribution de votre package aux utilisateurs finaux. Vous ne devez pas modifier 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 au-dessus de 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 test!")
    
  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"
    

    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

Pour utiliser l’authentification Microsoft Entra dans macOS, vous devez être connecté via l’extension Azure Repos dans Visual Studio Code ou en exécutant az loginl’interface azure Command-Line (CLI) .

  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 un autre ordinateur, copiez tous les fichiers à l’exception du .venv dossier sur l’autre ordinateur. L’environnement virtuel est recréé avec la première exécution.

Étape suivante

Pour obtenir d’autres exemples, consultez le dépôt GitHub du mssql-python pilote pour contribuer à des idées ou signaler des problèmes.