【问题标题】:show printed messages inside stored procedure在存储过程中显示打印的消息
【发布时间】:2021-08-15 02:12:53
【问题描述】:

当使用 sqlalchemy 执行时,是否可以看到嵌入在存储过程中的标准输出(或日志)T-SQL PRINT 消息?

--编辑--

出于这个原因,看起来 pyodbc 添加了一种从游标中检索消息的方法,并且它已被合并到 master 中。我仍然不知道如何让它冒泡到 sqlalchemy https://github.com/mkleehammer/pyodbc/pull/765#

--结束了--

我尝试将 echo=True 添加到引擎并设置日志级别以进行调试,但我什么也看不到

这就是我执行usp的方式

import sqlalchemy as sa
import logging

logging.basicConfig()
logger = logging.getLogger("sqlalchemy.engine")
logger.setLevel(logging.DEBUG)
engine = sa.create_engine(target_uri, echo=True)
statement = sa.sql.text(f"EXEC {usp_schema}.{usp_name}")
with engine.begin() as cnxn:
    cnxn.execute(statement)
CREATE PROCEDURE dbo.usp_do_stuff 
BEGIN
    BEGIN TRAN
        PRINT 'DELETE STAGE'
        PRINT 'LOAD STAGE'
        PRINT 'CLEAN STAGE'
        PRINT 'TRANSPORT STAGE'
    END TRAN
END;

【问题讨论】:

  • 相关 GitHub 问题 here。有一个 PR 已合并到 master 分支,但尚未发布。

标签: sql-server sqlalchemy pyodbc


【解决方案1】:

https://github.com/mkleehammer/pyodbc/pull/765

最近才被合并 (2021-01-21),SQLAlchemy 的 mssql+pyodbc:// 方言对此一无所知。如果您希望看到对该功能的支持添加到 SQLAlchemy,请打开功能请求here

与此同时,解决方法是从当前的 master 分支安装 pyodbc ...

pip install git+https://github.com/mkleehammer/pyodbc.git

...然后使用.raw_connection() 执行 SP 并检索消息:

"""existing stored procedure:
CREATE PROCEDURE [dbo].[usp_do_stuff] 
AS
BEGIN
    BEGIN TRANSACTION
        PRINT 'DELETE STAGE'
        PRINT 'LOAD STAGE'
        PRINT 'CLEAN STAGE'
        PRINT 'TRANSPORT STAGE'
    COMMIT TRANSACTION
END
"""
cnxn = engine.raw_connection()
crsr = cnxn.cursor()
crsr.execute("EXEC usp_do_stuff")
print(crsr.messages)
while crsr.nextset():
    print(crsr.messages)
"""
[('[01000] (0)', '[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]DELETE STAGE')]
[('[01000] (0)', '[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]LOAD STAGE')]
[('[01000] (0)', '[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]CLEAN STAGE')]
[('[01000] (0)', '[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]TRANSPORT STAGE')]
"""

【讨论】:

    猜你喜欢
    • 2013-12-01
    • 2020-05-01
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    相关资源
    最近更新 更多