在本快速入门中,将 Python 脚本连接到已创建并加载示例数据的数据库。 使用适用于 Python 的 pymssql
驱动程序连接到数据库并执行基本作,例如读取和写入数据。
pymssql 文档 | pymssql 源代码 | 包 (PyPi)
先决条件
Python 3
如果还没有 Python,请根据 python.org 安装 Python 运行时和 Python Package Index (PyPI) 包管理器。
不想使用自己的环境? 使用 GitHub Codespaces 以 devcontainer 身份打开。
来自 PyPI 的
pymssql
包。一个基于 SQL Server、Azure SQL 数据库或 Fabric 中的 SQL 数据库的数据库,包含
AdventureWorks2022
示例架构和有效的连接字符串。
设置
按照以下步骤配置开发环境,以使用 pymssql
Python 驱动程序开发应用程序。
注释
此驱动程序使用 TDS 协议,该协议默认在 SQL Server、Fabric 中的 SQL 数据库和 Azure SQL 数据库中启用。 无需进行额外配置。
安装 pymssql 包
从 PyPI 获取 pymssql
包。
在空目录中打开命令提示符。
安装
pymssql
包。pip install pymssql
检查已安装的包
可以使用 PyPI 命令行工具验证所需的包是否已安装。
使用
pip list
检查已安装的包列表。pip list
创建 SQL 数据库
本快速入门要求在 Microsoft SQL Server、Fabric 或 Azure SQL 数据库中的 SQL 数据库上使用 AdventureWorks2022 轻型 架构。
运行代码
创建新文件
创建名为
app.py
的新文件。添加模块 docstring。
""" Connects to a SQL database using pymssql """
导入包,包括
pymssql
。from os import getenv from dotenv import load_dotenv from pymssql import connect
使用
pymssql.connect
函数连接到 SQL 数据库。load_dotenv() conn = connect(getenv("SQL_SERVER"),getenv("SQL_USER"),getenv("SQL_PASSWORD"),getenv("SQL_DATABASE"))
在当前目录中,创建一个名为
*.env
的新文件。在
*.env
文件中,添加名为SQL_SERVER
、SQL_USER
、SQL_PASSWORD
、SQL_DATABASE
的连接字符串值的条目。 将此处的占位符替换为实际连接字符串值。SQL_SERVER="<server_name>" SQL_USER="<sql_user_name>" SQL_PASSWORD="<sql_user_password>" SQL_DATABASE="<sql_database>"
小窍门
此处使用的连接字符串在很大程度上取决于要连接到的 SQL 数据库的类型。 有关连接字符串及其语法的详细信息,请参阅 连接字符串语法参考。
执行查询
使用 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(as_dict=True) cursor.execute(SQL_QUERY)
注释
此函数实质上接受任意查询,并返回可使用 cursor.fetchone() 循环访问的结果集。
使用
foreach
循环从数据库获取所有记录。 然后打印记录。for r in cursor: print(f"{r['CustomerID']}\t{r['OrderCount']}\t{r['CompanyName']}")
app.py
文件。打开终端并测试应用程序。
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 (%s, %s, %s, %s, CURRENT_TIMESTAMP) """
使用
cursor.execute
执行该语句。cursor.execute( SQL_STATEMENT, ( f'Example Product {productNumber}', f'EXAMPLE-{productNumber}', 100, 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
后续步骤
访问pymssql
驱动程序的 GitHub 存储库以获取更多示例,并贡献想法或报告问题。