将存储过程SELECT结果读入PANAS数据帧

Read stored procedure select results into pandas dataframe(将存储过程SELECT结果读入PANAS数据帧)
本文介绍了将存储过程SELECT结果读入PANAS数据帧的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

已给予:

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?

推荐答案

改用Read_SQL_Query()

看起来@joris(+1)已经在问题正下方的评论中看到了这一点,但我没有看到,因为它不在回答部分中。

使用SQLA引擎--除了SQLAlChemy之外,Pandas只支持SQLite。然后使用read_sql_query()而不是Read_SQL()。后者试图自动检测您正在传递的是表名还是成熟的查询,但它在使用关键字‘exec’时似乎做得不是很好。使用READ_SQL_QUERY()跳过自动检测,并允许您显式指示您正在使用查询(还有一个READ_SQL_TABLE())。

import pandas as pd
import sqlalchemy

query = 'EXEC my_procedure @Param = {0}'.format(my_param)
engine = sqlalchemy.create_engine(my_connection_string)
df = pd.read_sql_query(query, engine)

这篇关于将存储过程SELECT结果读入PANAS数据帧的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
SSIS: Model design issue causing duplications - can two fact tables be connected?(SSIS:模型设计问题导致重复-两个事实表可以连接吗?)
SQL Server Graph Database - shortest path using multiple edge types(SQL Server图形数据库-使用多种边类型的最短路径)
Invalid column name when using EF Core filtered includes(使用EF核心过滤包括时无效的列名)
How should make faster SQL Server filtering procedure with many parameters(如何让多参数的SQL Server过滤程序更快)
How can I generate an entity–relationship (ER) diagram of a database using Microsoft SQL Server Management Studio?(如何使用Microsoft SQL Server Management Studio生成数据库的实体关系(ER)图?)