鉴于:
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;’在批量调用的前面.这将删除插入,更新和删除的计数.
确保使用正确的本机客户端模块.
看看这个堆栈溢出示例.
Calling a stored procedure python
祝好运