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数据帧的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
编程基础网
本文标题为:将存储过程SELECT结果读入PANAS数据帧
基础教程推荐
猜你喜欢
- SSMS 中的权限问题:“对象 'extended_properties'、数据库 'mssqlsystem_resource'、... 错误 229)上的 SELECT 权限被拒绝" 2022-01-01
- 无法解决整理冲突 2021-01-01
- SQL:使用来自具有相同列名的两个表中的数据... 2021-01-01
- 需要 MySQL 5.1 中的抽象触发器来更新审计日志 2021-01-01
- 在 SQL 中连接多个表 2021-01-01
- 如何使用 mysql.connector 禁用查询缓存 2022-01-01
- 是否可以执行按位分组功能? 2021-01-01
- SQL 效率:WHERE IN 子查询 vs. JOIN 然后 GROUP 2021-01-01
- SQL Server 实例在登录协商期间返回无效或不受支持的协议版本 2021-01-01
- 将 SQL Server DateTime 列迁移到 DateTimeOffset 2021-01-01
