【问题标题】:pyodbc calling Stored Procedures errorpyodbc 调用存储过程错误
【发布时间】:2018-08-06 10:57:04
【问题描述】:

当使用 pyodbc 调用存储过程时,它什么也不返回,因此 cursor.fetchall() 给出错误:

ProgrammingError                          Traceback (most recent call last)
<ipython-input-23-d35fc1caa8d6> in <module>()
----> 1 cursor.fetchall()

ProgrammingError: No results.  Previous SQL was not a query.

我试了几次都是一样的:

conn = pyodbc.connect(r'DSN=<DSN>;UID=<UID>;PWD=<pswd>;DATABASE=<database>;')
cursor = conn.cursor()

cursor.execute('Stored_procedure 'param1', 'param2', 'param3'')
cursor.fetchall()

cursor.execute("{CALL Stored_procedure (?,?,?)}", (p1, p2, p3))

或者和熊猫一起

pd.read_sql("exec Stored_procedure p1, p2, p3", conn)

使用以下方法获取表格数据没有问题:

df = pd.read_sql('SELECT * FROM Config', conn)

或使用 sqlcmd

获取数据
sqlcmd -S <DSN> -U <user> -P <password> -d <database> -Q "exec Stored_procedure 'p1', 'p2', 'p3'" -o sqlcms_exec.txt

有什么想法吗?谢谢

【问题讨论】:

    标签: python sql pandas pypyodbc


    【解决方案1】:

    问题是输出中有超过 1 个表。 解决方案:

    import pyodbc
    import pandas as pd
    conn = pyodbc.connect('DSN=<DSN>;UID=<UID>;PWD=<pswd>;DATABASE=<database>;')
    sql = "exec Storeed_Procedure 'p1', 'p2', 'p3'"
    cursor = conn.cursor()
    cursor.execute(sql)
    for i in range(50):
        cursor.nextset()  # go to next table
        try:
            f = cursor.fetchall()
            headers = [h[0] for h in cursor.description]
            return pd.DataFrame.from_records(f, columns=headers)
        except:
            continue 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-01
      • 2012-12-11
      • 1970-01-01
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多