Schnellstart: Wiederholbare Bereitstellungen mit dem mssql-python-Treiber für Python

In diesem Quickstart verwenden Sie uv, um Projektabhängigkeiten und -umgebungen für ein Python-Skript zu verwalten, das eine Verbindung mit einer Datenbank herstellt, die Sie erstellt und mit Beispieldaten geladen haben. Du verwendest den mssql-python Treiber von Python, um dich mit deiner Datenbank zu verbinden und grundlegende Operationen wie das Lesen und Schreiben von Daten auszuführen.

Der mssql-python Treiber erfordert keine externen Abhängigkeiten von Windows-Computern. Der Treiber installiert alles, was er mit einer einzigen pip Installation benötigt, sodass Sie die neueste Version des Treibers für neue Skripts verwenden können, ohne andere Skripts zu unterbrechen, die Sie nicht zum Upgrade und Test benötigen.

mssql-python-Dokumentation | mssql-python-Quellcode | Paket (PyPI) | Uv

Voraussetzungen

Betriebssystem-Voraussetzungen installieren

Installieren Sie die einmaligen betriebsystem-spezifischen Voraussetzungen. Windows-Nutzer können diesen Schritt überspringen. Für vollständige Plattformdetails siehe Install mssql-python.

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

Erstellen einer SQL-Datenbank

Erstellen oder verbinden Sie sich mit einer SQL-Datenbank auf einer der folgenden Plattformen:

Erstellen Sie das Projekt, und führen Sie den Code aus.

Erstellen eines neuen Projekts

  1. Öffnen Sie eine Eingabeaufforderung in Ihrem Entwicklungsverzeichnis. Wenn du keines hast, erstelle ein neues Verzeichnis, wie zum Beispiel python oder scripts. Vermeide Ordner auf deinem OneDrive, da Synchronisation die Verwaltung deiner virtuellen Umgebung beeinträchtigen kann.

  2. Erstellen Sie ein neues Projekt mit uv.

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

Hinzufügen von Abhängigkeiten

Im selben Verzeichnis installieren Sie die Pakete mssql-python, python-dotenv und rich.

uv add mssql-python python-dotenv rich

Starten Sie Visual Studio Code.

Führen Sie im selben Verzeichnis den folgenden Befehl aus.

code .

Pyproject.toml aktualisieren

  1. Öffnen Sie die Datei pyproject.toml in Ihrem Editor. Diese Datei enthält die Metadaten für Ihr Projekt.

  2. Überprüfen Sie den Inhalt der Datei. Es sollte mit diesem Beispiel vergleichbar sein. Beachten Sie die Python-Version und die Abhängigkeit; verwenden Sie für mssql-python>=, um eine Mindestversion festzulegen. Wenn Sie eine genaue Version bevorzugen, ändern Sie die >= Vorversionsnummer in ==. Die aufgelösten Versionen jedes Pakets werden im uv.lock gespeichert. Die Lockfile stellt sicher, dass Entwickler, die am Projekt arbeiten, konsistente Paketversionen verwenden. Außerdem wird sichergestellt, dass derselbe Satz von Paketversionen beim Verteilen des Pakets an Endbenutzer verwendet wird. Speichern Sie sowohl pyproject.toml als auch uv.lock, überprüfen Sie Änderungen an der Lockfile in Pull-Anfragen und führen Sie in CI einen von Ihrer Organisation genehmigten Abhängigkeitenscanner aus. Bearbeiten Sie die uv.lock Datei nicht direkt.

    [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>=1.16.0",
        "python-dotenv>=1.1.1",
        "rich>=14.1.0",
    ]
    
  3. Aktualisieren Sie den description Wert.

    description = "Connects to a SQL database using mssql-python"
    
  4. Speichern und schließen Sie die Datei.

Aktualisieren von main.py

  1. Öffnen Sie die Datei mit dem Namen main.py. Es sollte mit diesem Beispiel vergleichbar sein.

    def main():
        print("Hello from mssql-python-repeatable-qs!")
    
    if __name__ == "__main__":
        main()
    
  2. Am oberen Rand der Datei fügen Sie die folgenden Importe vor die Zeile mit def main()hinzu.

    Tipp

    Wenn Visual Studio Code Probleme beim Beheben von Paketen hat, müssen Sie den Interpreter aktualisieren, um die virtuelle Umgebung zu verwenden.

    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. Fügen Sie zwischen den Importen und der Zeile mit def main()dem folgenden Code hinzu.

    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. Fügen Sie zwischen den Importen und def get_results(sleep_time: int = 0) -> None: diesen Code hinzu.

    _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. Suchen Sie diesen Code.

    def main():
        print("Hello from mssql-python-repeatable-qs!")
    
  6. Ersetzen Sie ihn durch diesen 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. Speichern Sie und schließen Sie main.py.

Speichern der Verbindungszeichenfolge

  1. Öffnen Sie die .gitignore Datei, und fügen Sie einen Ausschluss für Dateien hinzu .env . Ihre Datei sollte dem folgenden Beispiel ähneln.

    # Python-generated files
    __pycache__/
    *.py[oc]
    build/
    dist/
    wheels/
    *.egg-info
    
    # Virtual environments
    .venv
    
    # Connection strings and secrets
    .env
    
  2. Speichern Sie und schließen Sie .gitignore.

  3. Erstellen Sie im aktuellen Verzeichnis eine neue Datei mit dem Namen .env.

  4. Fügen Sie in der .env Datei einen Eintrag für die Verbindungszeichenfolge mit dem Namen SQL_CONNECTION_STRINGhinzu. Ersetzen Sie die Platzhalter durch Ihre tatsächlichen Werte.

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

    Important

    Halten Sie .env lokal und aus der Versionsverwaltung heraus. Für CI- und bereitgestellte Umgebungen injizieren Sie die Verbindungszeichenfolge oder deren Komponentengeheimnisse aus Ihrem Plattform-Geheimnisspeicher, anstatt .env zwischen Rechnern zu kopieren.

    Die Verbindungszeichenfolge hängt von der Art der SQL-Datenbank ab, mit der du dich verbindest. Für die Azure SQL-Datenbank oder SQL-Datenbank in Fabric verwenden Sie die ODBC-Verbindungszeichenfolge aus dem Tab „Verbindungszeichenfolgen“ und passen Sie den Authentifizierungstyp für Ihr Szenario an. Für weitere Informationen zur Verbindungszeichenfolge-Syntax siehe Connection strings for mssql-python.

    Tipp

    Unter macOS funktionieren sowohl ActiveDirectoryInteractive als auch ActiveDirectoryDefault für die Microsoft Entra-Authentifizierung. ActiveDirectoryInteractive fordert Sie auf, sich jedes Mal anzumelden, wenn Sie das Skript ausführen. Um wiederholte Anmeldeaufforderungen zu vermeiden, melden Sie sich einmal mit dem Befehl Azure CLIaz login an und verwenden ActiveDirectoryDefaultSie . ActiveDirectoryDefault Verwendet die zwischengespeicherten Zugangsdaten wieder.

Verwenden Sie "uv run", um das Skript auszuführen.

  1. Führen Sie im Terminalfenster vor oder in einem neuen Terminalfenster, das im selben Verzeichnis geöffnet ist, den folgenden Befehl aus.

    uv run main.py
    
  2. Führe das Skript erneut mit Verzögerung aus, damit du beide Statusupdates sehen kannst.

    uv run main.py --sleep-time 5
    

    Dies ist die erwartete Ausgabe, wenn das Skript abgeschlossen ist.

                             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. Um Ihr Skript auf einen anderen Rechner zu übertragen, kopieren Sie die Projektdateien, einschließlich pyproject.toml und uv.lock, aber nicht den .venv Ordner oder eine lokale .env Datei. Rekonstruiere die virtuelle Umgebung beim ersten Durchlauf und liefere Geheimnisse über die Zielumgebung.