【发布时间】:2014-11-25 18:47:50
【问题描述】:
给定:
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?
【问题讨论】:
-
你用的是什么版本的熊猫?您可以尝试使用
pd.read_sql_query而不是read_sql吗? (read_sql中有一个关于执行存储过程的错误)
标签: sql-server stored-procedures pandas sqlalchemy pyodbc