![](/img/trans.png)
[英]pandas/sqlalchemy/pyodbc: Result object does not return rows from stored proc when UPDATE statement appears before SELECT
[英]Result object does not return rows when querying SQL Server database
編碼:
engine = db.engine
conn = engine.connect()
query = open('sql_file.sql', 'r')
df = pd.read_sql_query(query.read(), conn)
返回以下錯誤:
sqlalchemy.exc.ResourceClosedError: This result object does not return rows. It has been closed automatically.
我在sql文件中的查詢在SSMS中運行得很好,並返回了一個我想用Pandas讀取的大表。 為什么它不返回任何行,以及如何以某種方式執行sql文件,使數據進入數據幀?
遇到類似的問題。 從我可以看到的結果來看,它源於SQL Server作為結果集反饋臨時表創建的結果。 根據查詢的內容,它可能會返回許多結果集以及所需的結果集。 它可能來自Pandas在后台使用的sqlalchemy行為。
一些解決方案是將SET NOCOUNT ON
或SET ANSI_WARNINGS OFF
到查詢的頂部。 嘗試了一下,但仍然無法正常工作。
最后起作用的是從sqlalchemy獲取光標並將光標移到所需的結果集。 您返回的結果是一個元組列表,然后您可以使用DataFrame.from_records()
來構建數據DataFrame.from_records()
。
raw_connection = db_engine.raw_connection()
try:
cursor = raw_connection.cursor()
cursor.execute(sql)
cursor.nextset()
column_names = [column[0] for column in cursor.description]
rows = cursor.fetchall() # List of tuples
cursor.close()
finally:
raw_connection.close()
# Use from_records for a list of tuples
df = pandas.DataFrame.from_records(data=rows, columns=column_names, index=None)
請參閱: https : //docs.sqlalchemy.org/zh/13/core/connections.html#multiple-result-sets和: https : //pandas.pydata.org/pandas-docs/stable/reference/api/pandas .DataFrame.from_records.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.