使用pymssql操作MS SQL数据库
·
pymssql是Python中用于与Microsoft SQL Server数据库进行交互的第三方库。pymssql提供了连接到数据库、执行SQL查询、插入、更新和删除数据等功能。
第一步:安装pymssql库
python -m pin install pymssql
执行插入、更新和删除数据的操作
import pymssql
# 连接参数
server = 'server_name'
database = 'database_name'
username = 'username'
password = 'password'
# 建立连接
conn = pymssql.connect(server=server, database=database, user=username, password=password)
# 创建游标对象
cursor = conn.cursor()
# 执行SQL查询
cursor.execute("SELECT * FROM your_table")
# 获取查询结果
result = cursor.fetchall()
# 遍历结果
for row in result:
print(row)
# 插入数据
insert_query = "INSERT INTO your_table (column1, column2) VALUES (%s, %s)"
insert_data = ('value1', 'value2')
cursor.execute(insert_query, insert_data)
# 更新数据
update_query = "UPDATE your_table SET column1 = %s WHERE id = %s"
update_data = ('new_value', 1)
cursor.execute(update_query, update_data) #参数化查询
# 删除数据
delete_query = "DELETE FROM your_table WHERE id = %s"
delete_data = (1,)
cursor.execute(delete_query, delete_data)
# 提交事务
conn.commit()
# 关闭游标
cursor.close()
管理事务
# 创建游标对象
cursor = conn.cursor()
try:
# 开始事务
conn.begin()
# 执行数据库操作
cursor.execute("INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2')")
cursor.execute("UPDATE your_table SET column1 = 'new_value' WHERE id = 1")
# 提交事务
conn.commit()
except Exception as e:
# 回滚事务
conn.rollback()
print("Error:", e)
# 关闭游标
cursor.close()
查询结果处理
# 查询结果处理
# pymssql返回的查询结果是一个元组列表,其中每个元组表示一行数据。你可以通过遍历查询结果来逐行处理数据。
# 创建游标对象
cursor = conn.cursor()
# 执行查询
cursor.execute("SELECT column1, column2 FROM your_table")
# 获取查询结果
result = cursor.fetchall()
# 遍历结果
for row in result:
column1_value = row[0]
column2_value = row[1]
# 处理数据
# 关闭游标
cursor.close()
处理大型结果集
# 创建游标对象
cursor = conn.cursor()
# 执行查询
cursor.execute("SELECT column1, column2 FROM your_table")
# 获取一条记录
row = cursor.fetchone()
while row:
# 处理数据
print(row)
# 获取下一条记录
row = cursor.fetchone()
# 关闭游标
cursor.close()
批量插入数据
# 批量插入数据
# pymssql允许你使用executemany()方法进行批量插入,一次插入多行数据。
# 创建游标对象
cursor = conn.cursor()
# 准备插入数据
data = [('value1', 'value2'),
('value3', 'value4'),
('value5', 'value6')]
# 执行批量插入
insert_query = "INSERT INTO your_table (column1, column2) VALUES (%s, %s)"
cursor.executemany(insert_query, data)
# 提交事务
conn.commit()
# 关闭游标
cursor.close()
调用存储过程
# 存储过程调用
# 使用execute_proc()方法来执行存储过程。
# 创建游标对象
cursor = conn.cursor()
# 执行存储过程
cursor.execute_proc('your_stored_procedure_name', ('param1', 'param2'))
# 获取结果
result = cursor.fetchall()
# 关闭游标
cursor.close()
执行存储过程并获取参数返回值
# 如需要执行MSSQL数据库中的存储过程,并获取输出参数的值,可以使用pymssql提供的callproc()方法。使用callproc()方法执行名为your_stored_procedure_name的存储过程,并传递参数param1和param2。然后,可以使用getoutputparams()方法获取输出参数的值。
# 创建游标对象
cursor = conn.cursor()
# 执行存储过程
cursor.callproc('your_stored_procedure_name', (param1, param2))
# 获取输出参数的值
output_param1 = cursor.getoutputparams()[0]
output_param2 = cursor.getoutputparams()[1]
# 关闭游标
cursor.close()
分页查询
# 分页查询
# 使用mssql的OFFSET和FETCH语句来实现分页查询。通过调整page_size和page_number参数,可以获取指定页数的数据。
# 创建游标对象
cursor = conn.cursor()
# 定义分页查询语句
page_size = 10 # 每页的记录数
page_number = 1 # 页码
offset = (page_number - 1) * page_size # 计算偏移量
query = f"SELECT column1, column2 FROM your_table ORDER BY column1 OFFSET {offset} ROWS FETCH NEXT {page_size} ROWS ONLY"
# 执行分页查询
cursor.execute(query)
# 处理查询结果
result = cursor.fetchall()
for row in result:
# 处理数据
# 关闭游标
cursor.close()
处理数据库连接错误
import pymssql
# 处理数据库连接异常
try:
# 连接数据库
conn = pymssql.connect(server='server_name', database='database_name', user='username', password='password')
except pymssql.OperationalError as e:
# 处理连接错误
print("Connection Error:", e)
# 处理数据库异常
try:
# 执行数据库操作
cursor = conn.cursor()
# 执行查询、插入、更新等操作
# ...
#conn.commit()
cursor.execute("SELECT column1, column2 FROM your_table")
result = cursor.fetchall()
# 处理查询结果
for row in result:
# 处理数据
cursor.close()
except pymssql.Error as e:
print("Database Error:", e)
finally:
# 关闭连接
if conn:
conn.close()
获取查询结果的列信息
# 使用cursor.description属性获取查询结果的列信息,如列名、数据类型等
# 创建游标对象
cursor = conn.cursor()
# 执行查询
cursor.execute("SELECT column1, column2 FROM your_table")
# 获取列名
column_names = [column[0] for column in cursor.description]
# 获取列类型
column_types = [column[1] for column in cursor.description]
# 处理查询结果
result = cursor.fetchall()
for row in result:
for name, value in zip(column_names, row):
print(f"{name}: {value}")
# 关闭游标
cursor.close()
处理查询结果中的NULL值
# 在查询结果中,pymssql将列值为NULL值的表示为Python中的None。可以使用条件语句来处理查询结果中的NULL值。
cursor.execute("SELECT column1, column2 FROM your_table")
result = cursor.fetchall()
for row in result:
column1_value = row[0] if row[0] is not None else 'N/A'
column2_value = row[1] if row[1] is not None else 'N/A'
# 处理数据
批量更新数据
# 如需批量更新数据库中的数据,可以使用pymssql的executemany()方法
# 创建游标对象
cursor = conn.cursor()
# 定义更新语句和数据
update_query = "UPDATE your_table SET column1 = %s WHERE id = %s"
data = [('new_value1', 1), ('new_value2', 2), ('new_value3', 3)]
# 执行批量更新
cursor.executemany(update_query, data)
# 提交事务
conn.commit()
# 关闭游标
cursor.close()
使用with语句自动管理连接和事务
如需执行异步的MSSQL数据库操作,pymssql提供了对异步IO的支持。可以使用pymssql.connect()的asynchronous=True参数来创建异步连接,以及cursor.execute()的as_dict=True参数来执行异步查询并返回字典格式的结果。使用asyncio模块创建了一个异步的主函数main(),在其中创建了异步连接和游标,并执行了异步查询。最后,我们使用事件循环运行异步任务。
import asyncio
import pymssql
async def main():
# 创建异步连接
conn = await pymssql.connect(server='server_name', database='database_name', user='username', password='password', asynchronous=True)
# 创建异步游标
cursor = conn.cursor(as_dict=True)
# 执行异步查询
await cursor.execute("SELECT * FROM your_table")
# 获取结果
result = await cursor.fetchall()
# 处理查询结果
for row in result:
# 处理数据
# 关闭游标和连接
await cursor.close()
await conn.close()
# 创建事件循环并运行异步任务
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
连接池
连接池是一种用于管理数据库连接的技术,它可以提高应用程序的性能和可扩展性。pymssql支持使用连接池来管理数据库连接。使用连接池可以减少连接的创建和销毁开销,并提供连接的复用,从而提高应用程序的性能和可扩展性。
from pymssql import pool
# 创建连接池
pool = pool.ConnectionPool(server='server_name', database='database_name', user='username', password='password', max_connections=5)
# 从连接池获取连接
conn = pool.get_connection()
# 执行数据库操作
cursor = conn.cursor()
cursor.execute("SELECT * FROM your_table")
result = cursor.fetchall()
# 处理查询结果
for row in result:
# 处理数据
# 关闭游标和连接
cursor.close()
conn.close()
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)