gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:16:01 24 4
gpt4 key购买 nike

给定:

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)

关于sql-server - 将存储过程选择结果读入 pandas 数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26132718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com