【问题标题】:Execute stored procedure in python without return在python中执行存储过程而不返回
【发布时间】:2020-01-14 21:16:04
【问题描述】:

我正在使用此代码在 python 中执行 SP

conn = pymssql.connect(server="myServer", database="myDB", port="1433", user="myUser", password="myPwd")
pd.read_sql("EXEC MySP", conn)
conn.close()

但我收到此错误

文件 "C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\sql.py", 第 1469 行,在 read_query 中 columns = [col_desc[0] for col_desc in cursor.description]

TypeError: 'NoneType' 对象不可迭代

在做了一些研究后,我发现错误的原因是由于 SP 没有返回值。

好的,我的SP没有任何返回值,我只想按原样执行这个SP。

无论如何我可以做到这一点而不会出现此错误?

【问题讨论】:

    标签: python sql-server pandas stored-procedures pymssql


    【解决方案1】:

    试试这个:

    import sqlalchemy
    
    connection_string = 'mssql+pymssql://{username}:{password}@{host}:{port}/{database}'.format(username = <username>, password = <password>, host = <host>, port = <port>, database = <database>)
    engine = sqlalchemy.create_engine(connection_string)
    connection = engine.raw_connection()
    
    try:
        cursor = connection.cursor()
        cursor.callproc('<procedure_name>')
        cursor.close()
        connection.commit()
    finally:
        connection.close()
    

    您必须在连接字符串中输入用户名、密码等,并在 callproc 方法中输入您的过程名称作为参数。

    【讨论】:

    • 为什么需要创建游标?!
    • 在此处查看调用存储过程部分:docs.sqlalchemy.org/en/13/core/connections.html
    • 从那个链接 engine.execute("***") 似乎更简单
    • 不管怎样。前几天我遇到了同样的问题,并使用了上面的方法。不自称是这方面的专家。
    【解决方案2】:

    谢谢kjmerf

    我刚刚在我的 SP 末尾添加了 SELECT '' 并解决了问题。

    我认为除了 read_sql 在 pandas 中可能还有其他功能可以解决此问题,但我的搜索发现没有。

    【讨论】:

      猜你喜欢
      • 2018-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-01
      • 1970-01-01
      • 2017-12-22
      • 1970-01-01
      相关资源
      最近更新 更多