快速入門:使用適用於 Python 的 mssql-python 驅動程式進行連線

在本快速入門中,您會將 Python 腳本連線到您使用範例數據建立和載入的資料庫。 您可以使用適用於 Python 的 mssql-python 驅動程式來連線到資料庫並執行基本作業,例如讀取和寫入數據。

在 Windows 電腦上,mssql-python 驅動程式不需要任何外部相依性。 驅動程式會透過單一 pip 安裝來安裝所需的所有內容,讓您可以將最新版本的驅動程式用於新腳本,而不會中斷您沒有時間升級和測試的其他腳本。

本文中的本地 SQL 驗證範例僅用於針對你控制的 SQL Server 實例進行本地開發。 對於 Azure SQL Database、Fabric 中的 SQL 資料庫、共享開發環境、CI 及生產部署,請先使用 Microsoft Entra 認證或其他無密碼流程。

MSSQL-Python 文件 | MSSQL-Python 原始碼 | 套件(PyPI) | Visual Studio 程式碼

先決條件

在 SQL Server、Azure SQL Database 或 Fabric 中的 SQL 資料庫中建立或連接資料庫。 請依照以下步驟建立包含範例結構的AdventureWorks2025資料庫,並保留 連接字串 以備後用。

建立 SQL 資料庫

在以下平台建立或連接 SQL 資料庫:

設定

請遵循下列步驟來設定開發環境,以使用 mssql-python Python 驅動程式開發應用程式。

備註

此驅動程式採用 表格資料串流(TDS) 協定。 SQL Server、Fabric 中的 SQL 資料庫和 Azure SQL Database 預設啟用 TDS,因此不需要額外設定。

安裝 mssql-python 套件

從 PyPI 取得mssql-python 套件

  1. 在空的目錄中開啟命令提示字元。

  2. 安裝 mssql-python 套件。

    pip install mssql-python
    

安裝 python-dotenv 套件

從 PyPI 取得 python-dotenv 套件。

  1. 在相同的目錄中,安裝 python-dotenv 套件。

    pip install python-dotenv
    

確認已安裝的套件

您可以使用 PyPI 命令列工具來確認您預期的套件是否已安裝。

  1. 使用 pip list檢查已安裝的套件清單。

    pip list
    

執行程式碼

建立新的 檔案

  1. 建立名為 app.py 的新檔案。

  2. 新增模組 docstring。

    """
    Connects to a SQL database using mssql-python
    """
    
  3. 匯入套件,包括 mssql-python

    from os import getenv
    from dotenv import load_dotenv
    from mssql_python import connect
    
  4. 使用函式 mssql-python.connect 連線到 SQL 資料庫。

    load_dotenv()
    conn = connect(getenv("SQL_CONNECTION_STRING"))
    
  5. 在目前目錄中,建立名為 .env的新檔案。

  6. .env 檔案中,新增一個名為 SQL_CONNECTION_STRING 的連接字串項目。 請使用以下範例之一,並將佔位符替換成你的實際數值。

    對於 Azure SQL Database 或 Fabric 中的 SQL 資料庫,請先使用 Microsoft Entra 認證:

    SQL_CONNECTION_STRING="Server=<server_name>;Database=<database_name>;Encrypt=yes;TrustServerCertificate=no;Authentication=ActiveDirectoryInteractive"
    

    在開發過程中,本地 SQL Server 請先從 SQL 認證開始:

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

    Caution

    請將 .env 視為本機開發時的方便做法,而非部署機制。 切勿提交憑證,切勿在共享或生產環境中重複使用此SQL認證範例,且憑證驗證在本地開發外保持啟用。

    使用 Connection 字串 來調整範例以符合命名實例、容器或進階設定。 如果你是在 Fabric 裡連接 Azure SQL Database 或 SQL 資料庫,請使用 Microsoft Entra 認證,提供無密碼且互動式的登入選項。 關於更廣泛的秘密與憑證指引,請參見 安全最佳實務

執行查詢

使用 SQL 查詢字串來執行查詢並剖析結果。

  1. 建立 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. 使用 cursor.execute 從資料庫的查詢中擷取結果集。

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

    備註

    這個函式基本上接受任何查詢並回傳結果集。 要遍歷結果集,請使用 cursor.fetchone()

  3. 使用 cursor.fetchall 搭配 for 迴圈,從資料庫取得所有記錄。 然後,列印紀錄。

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

    小提示

    在 macOS 上,兩者都ActiveDirectoryInteractiveActiveDirectoryDefault適用於 Microsoft Entra 認證。 ActiveDirectoryInteractive 每次執行腳本時都會提示你登入。 為避免重複登入提示,請透過 Azure CLI 執行 az login,然後使用 ActiveDirectoryDefault,重複使用快取的憑證。

  5. 開啟終端機並測試應用程式。

    python app.py
    

    以下是預期的輸出。

    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
    

將數據列插入為交易

安全執行一個 INSERT 語句並傳遞參數。 將參數當做值傳遞,可保護您的應用程式免於 遭受SQL 插入 式攻擊。

  1. randrangerandom 庫匯入並添加到 app.py 的最上方。

    from random import randrange
    
  2. app.py 結尾新增程式碼,以產生隨機的產品編號。

    productNumber = randrange(1000)
    

    小提示

    在這裡產生隨機的產品名稱可確保您可以多次執行此範例。

  3. 建立 SQL 語句字串。

    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. 使用 cursor.execute 執行該語句。

    cursor.execute(
       SQL_STATEMENT,
       {
          'name': f'Example Product {productNumber}',
          'product_number': f'EXAMPLE-{productNumber}',
          'standard_cost': 100,
          'list_price': 200
       }
    )
    
  5. 使用 cursor.fetchone 擷取單一結果,打印該結果的唯一標識符,然後使用 connection.commit 將操作提交為交易。

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

    小提示

    您可以選擇性地使用 connection.rollback 來回復交易。

  6. 使用 cursor.closeconnection.close關閉游標和連接。

    cursor.close()
    conn.close()
    
  7. 儲存app.py 檔案並再次測試應用程式。

    python app.py
    

    以下是預期的輸出。

    Inserted Product ID : 1001
    

下一步

善用這些文章持續學習:

  • 連接字串以調整範例以適用於本地 SQL Server、Azure SQL、容器及命名實例。
  • 連線管理,使用上下文管理器、池化和連線設定。
  • 故障排除 以診斷認證、憑證及連線問題。