直接在数据库上从 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 调用脚本文件或可执行文件

ViewController 未按预期执行 segue

在一个非常特定的应用程序上从 firefox 执行 python 脚本,只是为了让 firefox 提供图形 IDE

Python Django 之 直接执行自定义SQL语句

python执行sql给日期格式字段插入数据

在 Ubuntu 上从 PHP 连接到 SQL Azure