在Python中,pymssql是一个用于与Microsoft SQL Server数据库进行交互的第三方库。pymssql提供了连接到数据库、执行SQL查询、插入、更新和删除数据等功能。下面我将详细介绍如何使用pymssql进行MSSQL数据库操作。
安装pymssql库 首先,确保你的Python环境已经安装了pymssql库。你可以使用pip工具进行安装
pip install pymssql
使用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()
如果查询结果集非常大,无法一次性全部加载到内存中,可以使用pymssql提供的fetchone()
和fetchmany()
方法来逐步获取结果集的数据。
# 创建游标对象 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()
# 存储过程调用 # pymssql也支持调用MSSQL数据库中的存储过程。你可以使用execute_proc()方法来执行存储过程。 # 创建游标对象 cursor = conn.cursor() # 执行存储过程 cursor.execute_proc('your_stored_procedure_name', ('param1', 'param2')) # 获取结果 result = cursor.fetchall() # 关闭游标 cursor.close()
# 定义分页参数 page_size = 10 page_number = 1 # 执行分页查询 query = f"SELECT column1, column2 FROM your_table ORDER BY column1 OFFSET {page_size * (page_number - 1)} ROWS FETCH NEXT {page_size} ROWS ONLY" cursor.execute(query) result = cursor.fetchall() for row in result: # 处理数据 # 创建游标对象 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') # 连接成功,执行数据库操作 cursor = conn.cursor() # 执行查询、插入、更新等操作 # ... conn.commit() cursor.close() conn.close() except pymssql.OperationalError as e: # 处理连接错误 print("Connection Error:", e)
如果你需要获取查询结果的列信息,如列名、数据类型等,可以使用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()
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' # 处理数据
如果你需要执行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()
# 创建游标对象 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语句管理连接和事务 with pymssql.connect(server='server_name', database='database_name', user='username', password='password') as conn: # 创建游标对象 cursor = conn.cursor() try: # 执行数据库操作 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支持使用连接池来管理数据库连接。使用连接池可以减少连接的创建和销毁开销,并提供连接的复用,从而提高应用程序的性能和可扩展性。
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()
本文为宁若水!原创文章,转载无需和我联系,但请注明来自[若水]博客 www.lalaya.net