Dela via


Snabbstart: Ansluta med pymssql-drivrutinen för Python

I den här snabbstarten ansluter du ett Python-skript till en databas som du skapade och läste in med exempeldata. Du använder pymssql drivrutinen för Python för att ansluta till databasen och utföra grundläggande åtgärder, till exempel att läsa och skriva data.

pymssql-dokumentation | pymssql-källkod | Paket (PyPi)

Förutsättningar

  • Python 3

    • Om du inte redan har Python installerar du Pakethanteraren python runtime och Python Package Index (PyPI) från python.org.

    • Föredrar du att inte använda din egen miljö? Öppna som en devcontainer med hjälp av GitHub Codespaces.

  • pymssql paket från PyPI.

  • En databas på SQL Server, Azure SQL Database eller SQL Database i Fabric med AdventureWorks2022 exempelschemat och en giltig anslutningssträng.

Förbereda

Följ de här stegen för att konfigurera utvecklingsmiljön för att utveckla ett program med hjälp av Python-drivrutinen pymssql .

Anmärkning

Den här drivrutinen använder TDS-protokollet (Tabular Data Stream), som är aktiverat som standard i SQL Server, SQL Database i Fabric och Azure SQL Database. Ingen extra konfiguration krävs.

Installera pymssql-paketet

pymssql Hämta paketet från PyPI.

  1. Öppna en kommandotolk i en tom katalog.

  2. Installera pymssql-paketet.

    pip install pymssql
    

Installera python-dotenv-paket

Hämta python-dotenv från PyPI.

  1. Installera paketet i python-dotenv samma katalog.

    pip install python-dotenv
    

Kontrollera installerade paket

Du kan använda kommandoradsverktyget PyPI för att kontrollera att dina avsedda paket är installerade.

  1. Kontrollera listan över installerade paket med pip list.

    pip list
    

Skapa en SQL-databas

Den här snabbstarten kräver AdventureWorks2022 Lightweight-schemat på Microsoft SQL Server, SQL Database i Fabric eller Azure SQL Database.

Kör koden

Skapa en ny fil

  1. Skapa en ny fil med namnet app.py.

  2. Lägg till en dokumentsträng i modulen.

    """
    Connects to a SQL database using pymssql
    """
    
  3. Importera paket, inklusive pymssql.

    from os import getenv
    from dotenv import load_dotenv
    from pymssql import connect
    
  4. pymssql.connect Använd funktionen för att ansluta till en SQL-databas.

    load_dotenv()
    conn = connect(getenv("SQL_SERVER"),getenv("SQL_USER"),getenv("SQL_PASSWORD"),getenv("SQL_DATABASE"))
    
  5. I den aktuella katalogen skapar du en ny fil med namnet .env.

  6. I filen .env lägger du till poster för anslutningssträngvärdena med namnet SQL_SERVER, SQL_USER, SQL_PASSWORD, SQL_DATABASE. Ersätt platshållarna här med dina faktiska anslutningssträngvärden.

    SQL_SERVER="<server_name>"
    SQL_USER="<sql_user_name>"
    SQL_PASSWORD="<sql_user_password>"
    SQL_DATABASE="<sql_database>"
    

    Tips/Råd

    Anslutningssträngen som används här beror till stor del på vilken typ av SQL-databas du ansluter till. Mer information om anslutningssträngar och deras syntax finns i FreeTDS-anslutningsattribut.

Köra en fråga

Använd en SQL-frågesträng för att köra en fråga och parsa resultatet.

  1. Skapa en variabel för SQL-frågesträngen.

    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. Använd cursor.execute för att hämta en resultatuppsättning från en fråga mot databasen.

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

    Anmärkning

    Den här funktionen accepterar i princip alla frågor och returnerar en resultatuppsättning, som kan itereras över med hjälp av cursor.fetchone().

  3. Använd en foreach loop för att hämta alla poster från databasen. Skriv sedan ut posterna.

    for r in cursor:
        print(f"{r['CustomerID']}\t{r['OrderCount']}\t{r['CompanyName']}")
    
  4. Sparaapp.py filen.

  5. Öppna en terminal och testa programmet.

    python app.py
    

    Här är de förväntade resultaten.

    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
    

Infoga en rad som en transaktion

Kör en INSERT-instruktion på ett säkert sätt och skicka parametrar. Att skicka parametrar som värden skyddar ditt program från SQL-inmatningsattacker .

  1. Lägg till en import för randrange från random biblioteket överst i app.py.

    from random import randrange
    
  2. I slutet av app.py lägg till kod för att generera ett slumpmässigt produktnummer.

    productNumber = randrange(1000)
    

    Tips/Råd

    Om du genererar ett slumpmässigt produktnummer här kan du köra det här exemplet flera gånger.

  3. Skapa en SQL-instruktionssträng.

    SQL_STATEMENT = """
    INSERT SalesLT.Product (
    Name,
    ProductNumber,
    StandardCost,
    ListPrice,
    SellStartDate
    ) OUTPUT INSERTED.ProductID
    VALUES (%s, %s, %s, %s, CURRENT_TIMESTAMP)
    """
    
  4. Kör instruktionen med cursor.execute.

    cursor.execute(
        SQL_STATEMENT,
        (
            f'Example Product {productNumber}',
            f'EXAMPLE-{productNumber}',
            100,
            200
        )
    )
    
  5. Hämta det enskilda resultatet med , cursor.fetchoneskriv ut resultatets unika identifierare och checka sedan in åtgärden som en transaktion med hjälp av connection.commit.

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

    Tips/Råd

    Du kan också använda connection.rollback för att återställa transaktionen.

  6. Stäng markören och anslutningen med hjälp av cursor.close och connection.close.

    cursor.close()
    conn.close()
    
  7. app.py filen och testa programmet igen.

    python app.py
    

    Här är de förväntade resultaten.

    Inserted Product ID : 1001
    

Nästa steg

pymssql Besök GitHub-drivrutinslagringsplatsen för drivrutiner för fler exempel för att bidra med idéer eller rapportera problem.