sql-server – 将存储过程选择结果读入pandas数据帧

前端之家收集整理的这篇文章主要介绍了sql-server – 将存储过程选择结果读入pandas数据帧前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
鉴于:
CREATE PROCEDURE my_procedure
    @Param INT
AS
    SELECT Col1,Col2
    FROM Table
    WHERE Col2 = @Param

我希望能够将其用作:

import pandas as pd
import pyodbc

query = 'EXEC my_procedure @Param = {0}'.format(my_param)
conn = pyodbc.connect(my_connection_string)

df = pd.read_sql(query,conn)

但这会引发错误

ValueError: Reading a table with read_sql is not supported for a DBAPI2 connection. Use an sqlAlchemy engine or specify an sql query

sqlAlchemy也不起作用:

import sqlalchemy
engine = sqlalchemy.create_engine(my_connection_string)
df = pd.read_sql(query,engine)

抛出:

ValueError: Could not init table 'my_procedure'

事实上,我可以直接使用pyodbc执行语句:

cursor = conn.cursor()
cursor.execute(query)
results = cursor.fetchall()
df = pd.DataFrame.from_records(results)

有没有办法将这些过程结果直接发送到DataFrame?

解决方法

https://code.google.com/p/pyodbc/wiki/StoredProcedures

我不是python专家,但sql Server有时会返回语句执行的计数.例如,更新将告知更新了多少行.

只需使用’SET NO COUNT;’在批量调用的前面.这将删除插入,更新和删除的计数.

确保使用正确的本机客户端模块.

看看这个堆栈溢出示例.

它具有adhoc sql调用存储过程示例.

Calling a stored procedure python

祝好运

猜你在找的MsSQL相关文章