Udostępnij za pośrednictwem


Szybki start: nawiązywanie połączenia za pomocą sterownika pyodbc dla języka Python

W tym szybkim przewodniku połączysz skrypt w Pythonie z bazą danych, którą utworzyłeś i załadowałeś danymi przykładowymi. Sterownik pyodbc dla Pythona służy do łączenia się z twoją bazą danych i wykonywania podstawowych operacji, takich jak odczytywanie i zapisywanie danych.

Dokumentacja pyodbc | kod źródłowy pyodbc | Pakiet (PyPi)

Wymagania wstępne

  • Python 3

    • Jeśli nie masz jeszcze języka Python, zainstaluj środowisko uruchomieniowe języka Python i menedżera pakietów python (PyPI) z python.org.

    • Wolisz nie używać własnego środowiska? Otwórz jako devcontainer przy użyciu usługi GitHub Codespaces.

  • pyodbc pakiet z PyPI.

  • Baza danych w programie SQL Server, usłudze Azure SQL Database lub bazie danych SQL w usłudze Fabric z przykładowym AdventureWorks2022 schematem i prawidłowymi parametrami połączenia.

Konfigurowanie

Wykonaj następujące kroki, aby skonfigurować środowisko deweloperskie do tworzenia aplikacji przy użyciu pyodbc sterownika języka Python.

Uwaga / Notatka

Ten sterownik używa protokołu TDS , który jest domyślnie włączony w programie SQL Server, bazie danych SQL w sieci szkieletowej i usłudze Azure SQL Database. Nie jest wymagana żadna dodatkowa konfiguracja.

Instalowanie pakietu pyodbc

pyodbc Pobierz pakiet z PyPI.

  1. Otwórz wiersz polecenia w pustym katalogu.

  2. Zainstaluj pakiet pyodbc.

    pip install pyodbc
    

Sprawdzanie zainstalowanych pakietów

Możesz użyć narzędzia wiersza polecenia PyPI, aby sprawdzić, czy są zainstalowane zamierzone pakiety.

  1. Sprawdź listę zainstalowanych pakietów za pomocą polecenia pip list.

    pip list
    

Tworzenie bazy danych SQL

Ten szybki start wymaga schematu AdventureWorks2022 Lightweight na serwerze Microsoft SQL Server, bazie danych SQL w usłudze Fabric lub usłudze Azure SQL Database.

Uruchamianie kodu

Tworzenie nowego pliku

  1. Utwórz nowy plik o nazwie app.py.

  2. Dodaj docstring modułu.

    """
    Connects to a SQL database using pyodbc
    """
    
  3. Zaimportuj pakiet pyodbc.

    from os import getenv
    from dotenv import load_dotenv
    from pyodbc import connect
    
  4. pyodbc.connect Użyj funkcji , aby nawiązać połączenie z bazą danych SQL.

    load_dotenv()
    conn = connect(getenv("SQL_CONNECTION_STRING"))
    
  5. W bieżącym katalogu utwórz nowy plik o nazwie *.env.

  6. W pliku *.env dodaj wpis dla łańcucha połączenia o nazwie SQL_CONNECTION_STRING. Zastąp przykład wartością rzeczywistych parametrów połączenia.

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

    Wskazówka

    Parametry połączenia używane w tym miejscu w dużej mierze zależą od typu bazy danych SQL, z którą nawiązujesz połączenie. Aby uzyskać więcej informacji na temat parametrów połączenia i ich składni, zobacz dokumentację składni parametrów połączenia.

Wykonywanie zapytania

Użyj ciągu zapytania SQL, aby wykonać zapytanie i przeanalizować wyniki.

  1. Utwórz zmienną dla ciągu zapytania 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. Użyj cursor.execute polecenia , aby pobrać zestaw wyników z zapytania względem bazy danych.

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

    Uwaga / Notatka

    Ta funkcja zasadniczo akceptuje dowolne zapytanie i zwraca zestaw wyników, który można iterować za pomocą funkcji cursor.fetchone().

  3. Użyj cursor.fetchall z pętlą foreach, aby pobrać wszystkie rekordy z bazy danych. Następnie wydrukuj rekordy.

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

  5. Otwórz terminal i przetestuj aplikację.

    python app.py
    

    Oto oczekiwane dane wyjściowe.

    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
    

Wstaw wiersz jako transakcję

Bezpiecznie wykonaj instrukcję INSERT i przekaż parametry. Przekazywanie parametrów jako wartości chroni aplikację przed atakami polegającymi na wstrzyknięciu kodu SQL .

  1. Dodaj import randrange z biblioteki random na początku app.py.

    from random import randrange
    
  2. Na końcu app.py dodaj kod w celu wygenerowania losowego numeru produktu.

    productNumber = randrange(1000)
    

    Wskazówka

    Generowanie losowego numeru produktu w tym miejscu gwarantuje, że można uruchomić ten przykład wiele razy.

  3. Utwórz ciąg instrukcji SQL.

    SQL_STATEMENT = """
    INSERT SalesLT.Product (
    Name,
    ProductNumber,
    StandardCost,
    ListPrice,
    SellStartDate
    ) OUTPUT INSERTED.ProductID
    VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP)
    """
    
  4. Wykonaj instrukcję przy użyciu polecenia cursor.execute.

    cursor.execute(
        SQL_STATEMENT,
        (
            f'Example Product {productNumber}',
            f'EXAMPLE-{productNumber}',
            100,
            200
        )
    )
    
  5. Pobierz pierwszą kolumnę pojedynczego wyniku przy użyciu cursor.fetchval, wyświetl unikatowy identyfikator wyniku, a następnie zatwierdź operację jako transakcję przy użyciu connection.commit.

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

    Wskazówka

    Opcjonalnie możesz użyć connection.rollback polecenia , aby wycofać transakcję.

  6. Zamknij kursor i połączenie za pomocą polecenia cursor.close i connection.close.

    cursor.close()
    conn.close()
    
  7. app.py plik i ponownie przetestuj aplikację.

    python app.py
    

    Oto oczekiwane dane wyjściowe.

    Inserted Product ID : 1001
    

Następny krok

Odwiedź repozytorium GitHub sterowników pyodbc, aby uzyskać więcej przykładów, wnieść pomysły lub zgłaszać problemy.