共用方式為


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

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

pymssql 檔 | pymssql 原始程式碼 | 套件 (PyPi)

先決條件

  • Python 3

  • pymssql 來自 PyPI 的套件。

  • SQL Server、Azure SQL Database 或 Fabric 環境中的 SQL 資料庫中具有範例架構和有效連接字串的資料庫。

設定

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

備註

此驅動程式會使用 TDS 通訊協議,預設會在 SQL Server、Fabric 中的 SQL Database 和 Azure SQL Database 中啟用。 不需要額外的設定。

安裝 pymssql 套件

從 PyPI 取得pymssql 套件

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

  2. 安裝 pymssql 套件。

    pip install pymssql
    

確認已安裝的套件

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

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

    pip list
    

建立 SQL 資料庫

本快速入門需要 AdventureWorks2022 Lightweight 架構,Microsoft SQL Server、Fabric 中的 SQL 資料庫或 Azure SQL Database。

執行程式碼

建立新的 檔案

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

  2. 新增模組 docstring。

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

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

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

  6. *.env檔案中,新增名為SQL_SERVERSQL_USERSQL_PASSWORDSQL_DATABASE的連接字串值。 請將佔位符替換為您的實際連接字串值。

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

    小提示

    這裡使用的連接字串在很大程度上取決於您所連線的 SQL 資料庫類型。 如需連接字串及其語法的詳細資訊,請參閱 連接字串語法參考

執行查詢

使用 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(as_dict=True)
    cursor.execute(SQL_QUERY)
    

    備註

    此函式基本上會接受任何查詢並傳回結果集,其可以使用 cursor.fetchone() 來逐一查看。

  3. foreach使用迴圈從資料庫取得所有記錄。 然後列印記錄。

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

  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 (%s, %s, %s, %s, CURRENT_TIMESTAMP)
    """
    
  4. 使用 cursor.execute 執行該語句。

    cursor.execute(
        SQL_STATEMENT,
        (
            f'Example Product {productNumber}',
            f'EXAMPLE-{productNumber}',
            100,
            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
    

後續步驟

pymssql如需更多範例,請瀏覽驅動程式 GitHub 存放庫,以參與想法或報告問題。