快速入门:使用适用于 Python 的 mssql-python 驱动程序进行连接

在本快速入门中,将 Python 脚本连接到已创建并加载示例数据的数据库。 使用适用于 Python 的 mssql-python 驱动程序连接到数据库并执行基本作,例如读取和写入数据。

mssql-python 文档 | mssql-python 源代码 | 包 (PyPi)

先决条件

  • Python 3

    • 如果还没有 Python,请根据 python.org 安装 Python 运行时和 Python Package Index (PyPI) 包管理器

    • 不想使用自己的环境? 使用 GitHub Codespaces 以 devcontainer 身份打开。

  • 来自 PyPI 的 mssql-python 包。

  • 包含示例架构和有效连接字符串的 Fabric AdventureWorks2022 中的 SQL Server、Azure SQL 数据库或 SQL 数据库上的数据库。

设置

按照以下步骤配置开发环境,以使用 mssql-python Python 驱动程序开发应用程序。

注释

此驱动程序使用 TDS 协议,该协议默认在 SQL Server、Fabric 中的 SQL 数据库和 Azure SQL 数据库中启用。 无需进行额外配置。

安装 mssql-python 包

从 PyPI 获取 mssql-python

  1. 在空目录中打开命令提示符。

  2. 安装 mssql-python 包。

    pip install mssql-python
    

检查已安装的包

可以使用 PyPI 命令行工具验证所需的包是否已安装。

  1. 使用 pip list 检查已安装的包列表。

    pip list
    

创建 SQL 数据库

本快速入门要求在 Microsoft SQL Server、Fabric 或 Azure SQL 数据库中的 SQL 数据库上使用 AdventureWorks2022 轻型 架构。

运行代码

创建新文件

  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. 在文件中,为名为 *.envSQL_CONNECTION_STRING连接字符串添加一个条目。 将此处的示例替换为实际连接字符串值。

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

    小窍门

    此处使用的连接字符串在很大程度上取决于要连接到的 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()
    cursor.execute(SQL_QUERY)
    

    注释

    此函数实质上接受任意查询,并返回可使用 cursor.fetchone() 循环访问的结果集。

  3. cursor.fetchall 循环一起使用 foreach,从数据库中获取所有记录。 然后打印记录。

    records = cursor.fetchall()
    for r in records:
        print(f"{r[0]}\t{r[2]}\t{r[1]}")
    
  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. 将库的randrange导入random添加到顶部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 (?, ?, ?, ?, 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
    

后续步骤

mssql-python有关更多示例,请访问驱动程序 GitHub 存储库,提供想法或报告问题。