【问题标题】:Python sqlalchemy calling stored procedurePython sqlalchemy 调用存储过程
【发布时间】:2018-01-10 05:46:43
【问题描述】:

我正在尝试使用sqlalchemypython 调用stored procedure。我的代码如下:

@database_connection_wrapper
def get_adv(connection):
    ''' get the adv using a stored proc from the database '''

    connection.callproc("GetAdvMedianTrailing30Days")
    results = list(connection.fetchall())
    print(results)

我收到以下错误: AttributeError: 'pyodbc.Connection' object has no attribute 'callproc'

我按照官方文档上的说明进行操作,但这并没有什么不同。

我在python 3.5

有没有其他方式可以拨打stored procedures

【问题讨论】:

    标签: python python-3.x sqlalchemy pyodbc


    【解决方案1】:

    https://github.com/mkleehammer/pyodbc/wiki/Calling-Stored-Procedurespyodbc 没有在连接对象上实现.callproc() 方法。您必须使用 SQL 调用 (.execute("{CALL GetAdvMedianTrailing30Days}")) 执行 sp。

    (这并不是一个真正的 SQLAlchemy 问题,因为您正在泄漏抽象以使用 pyodbc 进行 DB-API 调用)

    【讨论】:

    • 谢谢!我收到pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]The EXECUTE permission was denied on the object 'GetAdvMedianTrailing30Days', database 'XXX', schema 'dbo'. (229) (SQLExecDirectW)") 的错误。我该如何解决这个问题?
    • 您使用 sqlalchemy 登录服务器的用户是否具有在该数据库中执行 GetAdvMedianTrailing30Days 的必要权限?
    • 将不得不问我的团队:P。您发布的 github 链接非常有帮助,因为我存储的 proc 返回值我将不得不将其转换为 SQL 我认为的声明。再次感谢!
    • 你得到的错误意味着问题是数据库服务器上的权限,与 python 无关。
    • 是的,我也这么认为。我将不得不查看我正在使用的用户的SQL 权限。
    猜你喜欢
    • 1970-01-01
    • 2021-08-13
    • 2016-01-23
    • 2013-06-15
    • 2011-04-03
    • 2020-01-24
    • 2012-03-14
    • 2020-04-06
    相关资源
    最近更新 更多