Schnellstart: Herstellen einer Verbindung mit dem mssql-python-Treiber für Python

In dieser Schnellstartanleitung verbinden Sie ein Python-Skript mit einer Datenbank, 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.

Verwenden Sie das Beispiel der lokalen SQL-Authentifizierung in diesem Artikel nur für lokale Entwicklung gegen eine von Ihnen kontrollierte SQL Server-Instanz. Für Azure SQL-Datenbank, SQL-Datenbanken in Fabric, gemeinsame Entwicklungsumgebungen, CI und Produktionsbereitstellungen beginnen Sie mit Microsoft Entra-Authentifizierung oder einem anderen passwortlosen Flow.

mssql-python-Dokumentation | mssql-python-Quellcode | Paket (PyPI) | Visual Studio Code

Voraussetzungen

  • Python 3.10 oder höher.

  • Wenn Sie noch nicht über Python verfügen, installieren Sie den Python-Runtime - und Pip-Paket-Manager aus python.org.

  • Möchten Sie nicht Ihre eigene Umgebung verwenden? Unter Container- und lokale Entwicklung erfahren Sie, wie Sie einen reproduzierbaren Devcontainer oder eine GitHub-Codespaces-Umgebung erstellen.

  • (Optional) Azure Command-Line Interface (CLI).

Erstelle oder verbinde dich mit einer Datenbank auf SQL Server, Azure SQL-Datenbank oder SQL-Datenbank in Fabric. Verwenden Sie die folgenden Schritte, um eine Datenbank mit dem AdventureWorks2025 Beispielschema einzurichten und die Verbindungszeichenfolge für später aufzubewahren.

Erstellen einer SQL-Datenbank

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

Konfiguration

Führen Sie die folgenden Schritte aus, um Ihre Entwicklungsumgebung so zu konfigurieren, dass eine Anwendung mit dem mssql-python Python-Treiber entwickelt wird.

Hinweis

Dieser Treiber verwendet das Tabular Data Stream (TDS)- Protokoll. SQL Server, SQL-Datenbank in Fabric und Azure SQL-Datenbank aktivieren standardmäßig TDS, sodass keine zusätzliche Konfiguration erforderlich ist.

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++

Installieren des mssql-python-Pakets

Holen Sie sich das mssql-python-Paket von PyPI.

  1. Öffnen Sie eine Eingabeaufforderung in einem leeren Verzeichnis.

  2. Installieren Sie das mssql-python-Paket.

    pip install mssql-python
    

Installiere das python-dotenv-Paket

Hol dir das Paket python-dotenv von PyPI.

Installieren Sie das python-dotenv Paket im selben Verzeichnis.

pip install python-dotenv

Installierte Pakete prüfen

Verwenden Sie pip list, um zu überprüfen, ob Ihre vorgesehenen Pakete installiert sind.

pip list

Ausführen des Codes

Neue Datei erstellen

  1. Erstelle eine neue Datei mit dem Namen app.py.

  2. Fügen Sie einen Modul-Docstring hinzu.

    """
    Connects to a SQL database using mssql-python
    """
    
  3. Pakete importieren, einschließlich mssql-python.

    from os import getenv
    from dotenv import load_dotenv
    from mssql_python import connect
    
  4. Verwenden Sie die mssql-python.connect-Funktion, um eine Verbindung zu einer SQL-Datenbank herzustellen.

    load_dotenv()
    conn = connect(getenv("SQL_CONNECTION_STRING"))
    
  5. Erstellen Sie im aktuellen Verzeichnis eine neue Datei mit dem Namen .env.

  6. Fügen Sie in der .env Datei einen Eintrag für die Verbindungszeichenfolge mit dem Namen SQL_CONNECTION_STRINGhinzu. Verwenden Sie eines der folgenden Beispiele und ersetzen Sie die Platzhalter durch Ihre tatsächlichen Werte.

    Für Azure SQL-Datenbank oder SQL-Datenbank in Fabric beginnen Sie mit der Microsoft Entra-Authentifizierung:

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

    Für lokalen SQL Server während der Entwicklung beginnen Sie mit SQL-Authentifizierung:

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

    Caution

    Behandle .env es als lokalen Entwicklungskomfort, nicht als Bereitstellungsmechanismus. Nehmen Sie es niemals in einen Commit auf, verwenden Sie dieses SQL-Authentifizierungsbeispiel niemals in gemeinsam genutzten oder Produktionsumgebungen, und lassen Sie die Zertifikatsvalidierung außerhalb der lokalen Entwicklung aktiviert.

    Verwenden Sie Connection-Strings, um das Sample für benannte Instanzen, Container oder erweiterte Einstellungen anzupassen. Wenn du dich mit Azure SQL-Datenbank oder SQL Database in Fabric verbindest, nutze Microsoft Entra-Authentifizierung für passwortlose und interaktive Anmeldeoptionen. Für umfassendere Leitlinien zu Geheimnissen und Zertifikaten siehe Security Best Practices.

    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 Sie ActiveDirectoryDefault. ActiveDirectoryDefault verwendet die zwischengespeicherten Zugangsdaten wieder.

Ausführen einer Abfrage

Verwenden Sie eine Transact-SQL (T-SQL) Abfragezeichenkette, um eine Abfrage auszuführen und die Ergebnisse zu analysieren.

  1. Erstellen Sie eine Variable für die T-SQL-Abfragezeichenkette.

    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. Verwenden von cursor.execute zum Abrufen eines Resultsets aus einer Abfrage für die Datenbank.

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

    Hinweis

    Diese Funktion akzeptiert jede Abfrage und liefert eine Ergebnismenge zurück. Um über die Ergebnismenge zu iterieren, verwenden Sie cursor.fetchone().

  3. Verwenden von cursor.fetchall mit einem for Loop, um alle Datensätze aus der Datenbank abzurufen. Dann drucken Sie die Unterlagen aus.

    records = cursor.fetchall()
    for r in records:
        print(f"{r.CustomerID}\t{r.OrderCount}\t{r.CompanyName}")
    
  4. Speichern Sie die app.py Datei.

  5. Öffnen Sie ein Terminal und testen Sie die Anwendung.

    python app.py
    

    Die erwartete Ausgabe sieht folgendermaßen aus.

    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
    

Einfügen einer Zeile als Transaktion

Führen Sie eine INSERT Anweisung sicher aus und übergeben Sie Parameter. Das Übergeben von Parametern als Werte schützt Ihre Anwendung vor SQL-Einfügungsangriffen .

  1. Fügen Sie am Anfang von randrange einen Import für random aus der app.py-Bibliothek hinzu.

    from random import randrange
    
  2. Am Ende von app.py Code einfügen, um eine zufällige Produktnummer zu generieren.

    productNumber = randrange(1000)
    

    Tipp

    Eine zufällige Produktnummer verringert die Wahrscheinlichkeit eines Duplicate-Key-Fehlers, wenn Sie diese Probe mehrmals ausführen.

  3. Erstellen Sie eine Zeichenfolge mit einer T-SQL-Anweisung.

    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. Führen Sie die Anweisung mit cursor.execute aus.

    cursor.execute(
        SQL_STATEMENT,
        {
            'name': f'Example Product {productNumber}',
            'product_number': f'EXAMPLE-{productNumber}',
            'standard_cost': 100,
            'list_price': 200
        }
    )
    
  5. Fetchen Sie das einzelne Ergebnis mit cursor.fetchone, drucken Sie den eindeutigen Bezeichner des Ergebnisses, und committen Sie den Vorgang dann als Transaktion mit connection.commit.

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

    Tipp

    Optionalerweise können Sie connection.rollback verwenden, um die Transaktion rückgängig zu machen.

  6. Schließen Sie den Cursor und die Verbindung mithilfe von cursor.close und connection.close.

    cursor.close()
    conn.close()
    
  7. Speichern Sie die app.py Datei, und testen Sie die Anwendung erneut.

    python app.py
    

    Die erwartete Ausgabe sieht folgendermaßen aus.

    Inserted Product ID : 1001