直接在数据库上从 python 执行 SQL Server 存储过程
Posted
技术标签:
【中文标题】直接在数据库上从 python 执行 SQL Server 存储过程【英文标题】:Execute SQL Server stored procedure from python on database directly 【发布时间】:2021-10-25 19:49:33 【问题描述】:我想使用 Python 在数据库上运行现有的 SQL Server 存储过程。为了澄清,我不想在 Python 中获得输出。我希望将输出直接保存在数据库本身中。
我使用以下代码使用 pymssql 连接到数据库:
storedProc = "Exec TEST;"
cursor.execute( storedProc )
这是我的程序代码:
CREATE PROCEDURE dbo.TEST
as
set nocount on
IF OBJECT_ID('tempdb..#A', 'U')IS not NULL DROP TABLE #A
CREATE TABLE #A
([id] [INT] identity(1,1),
[CustomerName] [VARCHAR](30) NULL,
[OrderCount] [INT] NULL
)
ON [PRIMARY]
Insert into #A ([CustomerName],[OrderCount]) values('Rajjjj',22),('Kusum',3),('Akshita',4),('John',5),('Dan',6)
IF OBJECT_ID('dbo.TEST_A', 'U')IS NULL
CREATE TABLE dbo.TEST_A
(
[CustomerName] [VARCHAR](30) NULL,
[OrderCount] [INT] NULL
);
truncate table dbo.TEST_A
insert into dbo.TEST_A
这段代码运行过程,但是输出返回给Python,这不是我想要的。
【问题讨论】:
你需要编写一个存储过程来保存结果而不是返回结果... 过程不返回结果。它只是更新现有表。但是如果你在 python 中执行这个过程,它将返回表而不是在数据库上更新它,除非你有 conn.commit() 行(我缺少) @DaleK 完成。感谢您的提示。 请不要在问题中添加您的答案,您已经正确地添加了自己的答案。 我仍然觉得这很奇怪,因为您的 SP 中没有任何内容返回数据,我看不出无论有没有提交,您是如何获取任何数据的。但是你的问题已经解决了,我想这是主要的。 【参考方案1】:然后,发送到数据库的查询必须执行插入操作。 考虑一个名为 [proc_output] 的表与过程的返回具有相同的结构,代码将是:
storedProc = """
insert into proc_output
Exec Procedure_Name;
"""
cursor.execute( storedProc )
【讨论】:
以上是关于直接在数据库上从 python 执行 SQL Server 存储过程的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Linux Ubuntu 12.04 上从 Python 调用脚本文件或可执行文件