Rychlý start: Opakovatelná nasazení s ovladačem mssql-python pro Python

V tomto rychlém úvodu použijete uv ke správě závislostí projektu a prostředí pro skript v Pythonu, který se připojuje k databázi, kterou jste vytvořili a naplnili ukázkovými daty. Používáte mssql-python ovladač pro Python k připojení k databázi a provádění základních operací, jako je čtení a zápis dat.

Ovladač mssql-python nevyžaduje žádné externí závislosti na počítačích s Windows. Ovladač nainstaluje všechno, co potřebuje, s jednou pip instalací, což vám umožní používat nejnovější verzi ovladače pro nové skripty bez přerušení jiných skriptů, které nemáte čas upgradovat a testovat.

Dokumentace mssql-python, zdrojový kód mssql-python, Balíček (PyPI) uv

Požadavky

  • Python 3.10 nebo novější.

  • Pokud ještě nemáte Python, nainstalujte běhové prostředí Pythonu a správce balíčků pip z python.org.

  • Nechcete používat vlastní prostředí? Postupujte podle Kontejner a místní vývoj a vytvořte reprodukovatelné vývojové prostředí devcontainer nebo GitHub Codespaces.

  • Visual Studio Code s následujícími rozšířeními:

    • Rozšíření Pythonu pro Visual Studio Code
  • Azure Command-Line Interface (CLI) pro ověřování bez hesla v systému macOS a Linux.

  • Pokud ještě uvnemáte, postupujte podle pokynů k instalaci.

  • Databáze na SQL serveru, Azure SQL Database nebo SQL databázi ve Fabric, obsahující ukázkové AdventureWorks2025 schéma a platný připojovací řetězec.

Nainstalujte požadavky pro operační systém

Nainstalujte požadavky specifické pro jednorázový operační systém. Uživatelé Windows mohou tento krok přeskočit. Pro úplné podrobnosti o platformě viz Instalace mssql-python.

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

Vytvoření databáze SQL

Vytvořte nebo se připojte k SQL databázi na jedné z následujících platforem:

Vytvoření projektu a spuštění kódu

Vytvoření nového projektu

  1. Otevřete příkazový řádek ve vývojovém adresáři. Pokud žádný nemáte, vytvořte nový adresář, například python nebo scripts. Vyhněte se složkám na OneDrive, protože synchronizace může narušit správu virtuálního prostředí.

  2. Vytvořte nový projekt pomocí uvpříkazu .

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

Přidejte závislosti

Ve stejném adresáři nainstalujte balíčky mssql-python, python-dotenv a rich.

uv add mssql-python python-dotenv rich

Spusťte Visual Studio Code

Ve stejném adresáři spusťte následující příkaz.

code .

Aktualizace pyproject.toml

  1. Otevřete soubor v editoru pyproject.toml . Tento soubor obsahuje metadata vašeho projektu.

  2. Zkontrolujte obsah souboru. Měl by se podobat tomuto příkladu. Všimněte si verze Pythonu a závislosti pro mssql-python; k definování minimální verze použijte >=. Pokud dáváte přednost přesné verzi, změňte >= před číslem verze na ==. Vyřešené verze každého balíčku jsou uloženy v uv.lock. Zámek zajišťuje, že vývojáři pracující na projektu používají konzistentní verze balíčků. Také zajišťuje, aby se při distribuci balíčku koncovým uživatelům používala úplně stejná sada verzí balíčků. Do commitu zahrňte jak pyproject.toml, tak uv.lock, zkontrolujte změny v souborech lockfile v pull requestech a v CI spusťte organizací schválený nástroj pro kontrolu závislostí. Neupravujte uv.lock soubor přímo.

    [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. Aktualizujte hodnotu description .

    description = "Connects to a SQL database using mssql-python"
    
  4. Uložte a zavřete soubor.

Aktualizace main.py

  1. Otevřete soubor s názvem main.py. Měl by se podobat tomuto příkladu.

    def main():
        print("Hello from mssql-python-repeatable-qs!")
    
    if __name__ == "__main__":
        main()
    
  2. Na vrchol souboru přidejte následující importy před řádek s def main().

    Návod

    Pokud má Visual Studio Code potíže s řešením balíčků, musíte interpreta aktualizovat tak, aby používal virtuální prostředí.

    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. Mezi importy a řádek s def main(), přidejte následující kód.

    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. Mezi importy a def get_results(sleep_time: int = 0) -> None:přidejte tento kód.

    _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. Vyhledejte tento kód.

    def main():
        print("Hello from mssql-python-repeatable-qs!")
    
  6. Nahraďte ho tímto kódem.

    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. Uložte a zavřete main.py.

Uložte řetězec připojení

  1. .gitignore Otevřete soubor a přidejte vyloučení souborů.env. Váš soubor by měl být podobný následujícímu příkladu.

    # Python-generated files
    __pycache__/
    *.py[oc]
    build/
    dist/
    wheels/
    *.egg-info
    
    # Virtual environments
    .venv
    
    # Connection strings and secrets
    .env
    
  2. Uložte a zavřete .gitignore.

  3. V aktuálním adresáři vytvořte nový soubor s názvem .env.

  4. .env V souboru přidejte položku pro připojovací řetězec s názvem SQL_CONNECTION_STRING. Zástupné symboly nahraďte skutečnými hodnotami.

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

    Important

    Držte se .env lokálně a mimo kontrolu zdrojového kódu. Pro CI a nasazená prostředí vkládejte připojovací řetězec nebo jeho komponentní tajemství z platformy secret store místo kopírování .env mezi stroji.

    připojovací řetězec závisí na typu SQL databáze, ke které se připojujete. Pro Azure SQL Database nebo SQL databázi ve Fabric použijte ODBC připojovací řetězec z karty připojovací řetězecs a upravte typ autentizace pro váš scénář. Pro více informací o syntaxi připojovací řetězec viz Connection strings for mssql-python.

    Návod

    V systému macOS funguje ověřování pomocí Microsoft Entra jak s ActiveDirectoryInteractive, tak s ActiveDirectoryDefault. ActiveDirectoryInteractive vás vyzve k přihlášení při každém spuštění skriptu. Abychom se vyhnuli opakovaným výzvám k přihlášení, přihlaste se jednou příkazem Azure CLIaz login a použijte příkaz ActiveDirectoryDefault. ActiveDirectoryDefault znovu použije uložené přihlašovací údaje.

Použijte 'uv run' ke spuštění skriptu

  1. V okně terminálu před nebo v novém okně terminálu, které se otevře ve stejném adresáři, spusťte následující příkaz.

    uv run main.py
    
  2. Spusť skript znovu s prodlevou, abys viděl obě aktualizace stavu.

    uv run main.py --sleep-time 5
    

    Tady je očekávaný výstup po dokončení skriptu.

                             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. Pro nasazení skriptu na jiný počítač zkopírujte soubory projektu, včetně pyproject.toml a uv.lock, ale ne složku .venv ani žádný lokální .env soubor. Při prvním spuštění znovu vytvořte virtuální prostředí a tajné údaje zadejte prostřednictvím cílového prostředí.