Sdílet prostřednictvím


Rychlý start: Připojení pomocí ovladače pyodbc pro Python

V tomto rychlém startu připojíte skript Pythonu k databázi, kterou jste vytvořili a načetli s ukázkovými daty. Pomocí driveru pyodbc pro Python se připojujete k databázi a provádíte základní operace, jako je čtení a zapisování dat.

Dokumentace pyodbc | Zdrojový kód pyodbc | Balíček (PyPi)

Požadavky

  • Python 3

    • Pokud ještě nemáte Python, nainstalujte z python.org správce balíčků Python runtime a Python Package Index (PyPI).

    • Chcete raději nepoužívat vlastní prostředí? Otevřete jako devcontainer pomocí GitHub Codespaces.

  • pyodbc balíček z PyPI.

  • Databáze na SQL Serveru, Azure SQL Database nebo SQL databáze v Fabric s ukázkovým AdventureWorks2025 schématem a platným připojovacím řetězcem.

Instalace

Podle těchto kroků nakonfigurujte vývojové prostředí pro vývoj aplikace pomocí ovladače Pythonu pyodbc .

Poznámka:

Tento ovladač používá protokol TDS (Tabular Data Stream), který je ve výchozím nastavení povolený v SQL Serveru, databázi SQL v Prostředcích infrastruktury a Azure SQL Database. Nevyžaduje se žádná další konfigurace.

Instalace balíčku pyodbc

pyodbc Získejte balíček z PyPI.

  1. Otevřete příkazový řádek v prázdném adresáři.

  2. Nainstalujte balíček pyodbc.

    pip install pyodbc
    

Instalace balíčku python-dotenv

Získejte python-dotenv z PyPI.

  1. Ve stejném adresáři nainstalujte python-dotenv balíček.

    pip install python-dotenv
    

Kontrola nainstalovaných balíčků

Pomocí nástroje příkazového řádku PyPI můžete ověřit, že jsou nainstalované požadované balíčky.

  1. Zkontrolujte seznam nainstalovaných balíčků s příponou pip list.

    pip list
    

Vytvoření databáze SQL

Tento rychlý start vyžaduje schéma AdventureWorks2025 Lightweight na Microsoft SQL Serveru, SQL databázi v Fabric nebo Azure SQL Database.

Vytvoření databáze SQL v řádu minut pomocí webu Azure Portal

ODBC Zkopírujte připojovací řetězec z karty Připojovací řetězce.

Spuštění kódu

Vytvoření nového souboru

  1. Vytvořte nový soubor s názvem app.py.

  2. Přidejte dokumentační řetězec modulu.

    """
    Connects to a SQL database using pyodbc
    """
    
  3. Importujte balíček pyodbc.

    from os import getenv
    from dotenv import load_dotenv
    from pyodbc import connect
    
  4. pyodbc.connect Pomocí funkce se připojte k databázi SQL.

    load_dotenv()
    conn = connect(getenv("SQL_CONNECTION_STRING"))
    
  5. V aktuálním adresáři vytvořte nový soubor s názvem .env.

  6. .env V souboru přidejte položku pro připojovací řetězec s názvem SQL_CONNECTION_STRING. Příklad zde nahraďte skutečnou hodnotou připojovacího řetězce.

    SQL_CONNECTION_STRING="Driver={ODBC Driver 18 for SQL Server};Server=<server_name>;Database={<database_name>};Encrypt=yes;TrustServerCertificate=no;Authentication=ActiveDirectoryInteractive"
    

    Návod

    Připojovací řetězec použitý zde do značné míry závisí na typu databáze SQL, ke které se připojujete. Pokud se připojujete k Azure SQL Database nebo databázi SQL ve Fabric, použijte připojovací řetězec ODBC z karty Připojovací řetězce. Možná budete muset upravit typ ověření v závislosti na vašem scénáři. Další informace o připojovacích řetězcích a jejich syntaxi najdete v referenčních informacích k syntaxi připojovacího řetězce.

Provedení dotazu

Pomocí řetězce dotazu SQL spusťte dotaz a parsujte výsledky.

  1. Vytvořte proměnnou pro řetězec dotazu SQL.

    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. Slouží cursor.execute k načtení sady výsledků z dotazu na databázi.

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

    Poznámka:

    Tato funkce v podstatě přijímá jakýkoli dotaz a vrací sadu výsledků, kterou lze projít pomocí cursor.fetchone().

  3. Použijte cursor.fetchall se smyčkou foreach k získání všech záznamů z databáze. Potom záznamy vytiskněte.

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

  5. Otevřete terminál a otestujte aplikaci.

    python app.py
    

    Tady je očekávaný výstup.

    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
    

Vložte řádek jako transakci

Bezpečně spusťte příkaz INSERT a předejte parametry. Předávání parametrů jako hodnot chrání vaši aplikaci před útoky prostřednictvím injektáže SQL .

  1. Přidejte import randrange z knihovny random do horní části souboru app.py.

    from random import randrange
    
  2. Na konci app.py přidejte kód pro vygenerování náhodného čísla výrobku.

    productNumber = randrange(1000)
    

    Návod

    Vygenerování náhodného čísla produktu tady zajistí, že tento vzorek můžete spustit několikrát.

  3. Vytvořte řetězec příkazu SQL.

    SQL_STATEMENT = """
    INSERT SalesLT.Product (
    Name,
    ProductNumber,
    StandardCost,
    ListPrice,
    SellStartDate
    ) OUTPUT INSERTED.ProductID
    VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP)
    """
    
  4. Proveďte příkaz pomocí cursor.execute.

    cursor.execute(
        SQL_STATEMENT,
        (
            f'Example Product {productNumber}',
            f'EXAMPLE-{productNumber}',
            100,
            200
        )
    )
    
  5. Načtěte první sloupec jednoho výsledku pomocí cursor.fetchval, vytiskněte jedinečný identifikátor výsledku a pak potvrďte operaci jako transakci pomocí connection.commit.

    resultId = cursor.fetchval()
    print(f"Inserted Product ID : {resultId}")
    conn.commit()
    

    Návod

    Volitelně můžete použít connection.rollback k vrácení transakce zpět.

  6. Zavřete kurzor a připojení pomocí cursor.close a connection.close.

    cursor.close()
    conn.close()
    
  7. app.py soubor a aplikaci znovu otestujte.

    python app.py
    

    Tady je očekávaný výstup.

    Inserted Product ID : 1001
    

Další krok

Další příklady najdete v pyodbc úložišti GitHubu ovladače, kde můžete přispívat nápady nebo hlásit problémy.