数据库错误:('HY000','[HY000] [Microsoft][ODBC SQL Server 驱动程序]连接正忙于另一个 hstmt (0) (SQLExecDirectW) 的结果')

问题描述 投票:0回答:4

我正在尝试将数据从 SQL Server 读取到 pandas 数据框中。下面是代码。

def get_data(size):
    con = pyodbc.connect(r'driver={SQL Server}; server=SPROD_RPT01; database=Reporting')
    cur = con.cursor()
    db_cmd = "select distinct top %s * from dbo.KrishAnalyticsAllCalls" %size
    res = cur.execute(db_cmd)
    sql_out = pd.read_sql_query(db_cmd, con, chunksize=10**6)
    frames = [chunk for chunk in sql_out]
    df_sql = pd.concat(frames)
    return df_sql

df = get_data(5000000)

我收到以下错误:

pandas.io.sql.DatabaseError:sql 'select different 执行失败 前 500000 个 * 来自 dbo.KrishAnalyticsAllCalls': ('HY000', '[HY000] [Microsoft][ODBC SQL Server 驱动程序]连接正忙于处理结果 另一个 hstmt (0) (SQLExecDirectW)')

我之前已经执行过该函数,并用

ctrl+k
中断了执行,因为我想对函数进行更改。现在,在进行更改后,当我尝试执行该函数时,我收到了上述错误。

我如何终止该连接/IPython 内核,因为我不知道有任何 IPython 内核正在运行并在函数中执行查询?

python sql-server pandas pyodbc
4个回答
14
投票

我也面临着同样的问题。当我使用

fetchall()
功能时,这个问题得到了解决。以下是我使用的代码。

import pypyodbc as pyodbc

def connect(self, query):
    con = pyodbc.connect(self.CONNECTION_STRING)
    cursor = con.cursor()
    print('Connection to db successful')
    cmd = (query)
    results = cursor.execute(cmd).fetchall()
    df = pd.read_sql(query, con)
    return df, results

使用

cursor.execute(cmd).fetchall()
而不是
cursor.execute(cmd)
解决了这个问题。 希望这有帮助。


5
投票

该问题是由于游标在 pd.read_sql_query() 命令之前执行的。 Pandas 使用连接和 SQL 字符串来获取数据。不需要 DB 游标。

#res = cur.execute(db_cmd)
sql_out = pd.read_sql_query(db_cmd, con, chunksize=10**6)
print(sql_out)

0
投票

很可能您还没有连接到 SQL 服务器。或者,您在先前的实例中连接了运行的不同 SQL 查询。无论哪种方式,您都需要重新建立连接。

import pyodbc as pyodbc
conn = pyodbc.connect('Driver={YOUR_DRIVER};''Server=YOUR_SERVER;''Database=YOUR_DATABASE;''Trusted_Connection=yes')

然后执行你的SQL:

sql = conn.cursor()
sql.execute("""ENTER YOUR SQL""")

然后变身为熊猫:

df = pd.DataFrame.from_records(sql.fetchall(),columns=[desc[0] for desc in sql.description])

0
投票

在尝试重新索引我的弹性搜索索引时,我遇到了同样的错误消息。它会给我“连接正忙于其他结果......”消息。

我的情况的解决方案是将以下内容添加到我的数据库连接中,特别是选项中的 extra_params 如下...

"OPTIONS": {
                "driver": "ODBC Driver 17 for SQL Server",
                "extra_params": "MARS_Connection=Yes",
            },
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.