【问题标题】:Execute SQL Server stored procedure from python on database directly直接在数据库上从 python 执行 SQL Server 存储过程
【发布时间】: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 中没有任何内容返回数据,我看不出无论有没有提交,您是如何获取任何数据的。但是你的问题已经解决了,我想这是主要的。

标签: python sql-server pymssql


【解决方案1】:

然后,发送到数据库的查询必须执行插入操作。 考虑一个名为 [proc_output] 的表与过程的返回具有相同的结构,代码将是:

storedProc = """
insert into proc_output
    Exec Procedure_Name;
"""
cursor.execute( storedProc )

【讨论】:

    猜你喜欢
    • 2016-10-21
    • 2011-11-07
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    相关资源
    最近更新 更多