簡體   English   中英

查詢SQL Server數據庫時,結果對象不返回行

[英]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 ONSET 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM