在本快速入门中,将 Python 脚本连接到使用示例数据创建和加载的数据库。 使用适用于 Python 的 mssql-python 驱动程序连接到数据库并执行基本作,例如读取和写入数据。
驱动程序 mssql-python 不需要 Windows 计算机上的任何外部依赖项。 驱动程序通过单个 pip 安装来安装它所需的一切,使你能够将最新版本的驱动程序用于新脚本,同时不会影响那些没有时间升级和测试的其他脚本。
本文中的本地SQL认证示例仅用于针对你控制的SQL Server实例进行本地开发。 对于Azure SQL 数据库、Fabric中的SQL数据库、共享开发环境、CI和生产部署,建议从Microsoft Entra认证或其他无密码流程开始。
mssql-python 文档 | mssql-python 源代码 | 包 (PyPI) | Visual Studio Code
先决条件
Python 3.10 或更高版本
如果还没有 Python,请从 python.org 安装 Python 运行时和 pip 包管理器。
不想使用您自己的环境吗? 遵循容器和本地开发,创建一个可复现的开发容器或 GitHub Codespaces 环境。
在SQL Server、Azure SQL 数据库或Fabric中的SQL数据库中创建或连接数据库。 按照以下步骤,用示例模式搭建数据库AdventureWorks2025,并保留连接字符串以备后用。
创建 SQL 数据库
在以下平台之一创建或连接SQL数据库:
设置
按照以下步骤配置开发环境,以使用 mssql-python Python 驱动程序开发应用程序。
注释
该驱动程序使用 表格数据流(TDS) 协议。 SQL Server、Fabric 中的 SQL 数据库和 Azure SQL 数据库 默认启用 TDS,因此无需额外配置。
安装 mssql-python 包
从 PyPI 获取 mssql-python 包。
在空目录中打开命令提示符。
安装
mssql-python包。pip install mssql-python
安装python-dotenv包
从 PyPI 获取 python-dotenv 软件包。
在同一目录中,安装
python-dotenv包。pip install python-dotenv
检查已安装的包
可以使用 PyPI 命令行工具验证所需的包是否已安装。
使用
pip list检查已安装的包列表。pip list
运行代码
创建新文件
创建名为
app.py的新文件。添加模块 docstring。
""" Connects to a SQL database using mssql-python """导入包,包括
mssql-python。from os import getenv from dotenv import load_dotenv from mssql_python import connect使用
mssql-python.connect函数连接到 SQL 数据库。load_dotenv() conn = connect(getenv("SQL_CONNECTION_STRING"))在当前目录中,创建一个名为
.env的新文件。在
.env文件中,添加一个名为SQL_CONNECTION_STRING的连接字符串条目。 请使用以下例子之一,并用你的实际值替换占位符。对于Azure SQL 数据库或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"注意
应视
.env为本地开发便利,而非部署机制。 切勿提交,切勿在共享或生产环境中重复使用此SQL认证示例,且在本地开发外保持证书验证开启。使用 连接字符串 将样本调整为命名实例、容器或高级设置。 如果要连接到 Azure SQL 数据库 或 Fabric 中的 SQL 数据库,请使用Microsoft Entra 身份验证进行无密码和交互式登录。 有关更广泛的秘密和证书指导,请参见 安全最佳实践。
执行查询
使用 SQL 查询字符串执行查询并解析结果。
为 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; """使用
cursor.execute从数据库查询中检索结果集。cursor = conn.cursor() cursor.execute(SQL_QUERY)注释
该函数本质上接受任何查询并返回结果集。 要遍历结果集,可以使用 cursor.fetchone()。
与
cursor.fetchall循环一起使用for,从数据库中获取所有记录。 然后,打印记录。records = cursor.fetchall() for r in records: print(f"{r.CustomerID}\t{r.OrderCount}\t{r.CompanyName}")app.py文件。小窍门
在 macOS 上,
ActiveDirectoryInteractive和ActiveDirectoryDefault都可用于 Microsoft Entra 身份验证。ActiveDirectoryInteractive每次运行脚本时都会提示你登录。 为避免重复登录提示,请通过Azure CLI运行az login,然后使用ActiveDirectoryDefault,该登录可重复使用缓存的凭证。打开终端并测试应用程序。
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 注入 攻击。
将
randrange从random库中导入,并添加到app.py的顶部。from random import randrange在
app.py末尾添加代码以生成随机的产品编号。productNumber = randrange(1000)小窍门
在此处生成随机的产品编号可确保可以多次运行此示例。
创建 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) """使用
cursor.execute执行该语句。cursor.execute( SQL_STATEMENT, { 'name': f'Example Product {productNumber}', 'product_number': f'EXAMPLE-{productNumber}', 'standard_cost': 100, 'list_price': 200 } )使用
cursor.fetchone提取单个结果,打印结果的唯一标识符,然后使用connection.commit将该操作作为事务提交。result = cursor.fetchone() print(f"Inserted Product ID : {result.ProductID}") conn.commit()小窍门
也可选择使用
connection.rollback回滚该事务。使用
cursor.close和connection.close关闭游标和连接。cursor.close() conn.close()app.py文件并再次测试应用程序。python app.py下面是预期的输出。
Inserted Product ID : 1001
后续步骤
通过这些文章继续深入学习: