DatabaseError: ('HY000', '[HY000] [Microsoft][ODBC SQL Server Driver]Connection is busy with results for another hstmt (0) (SQLExecDirectW)')
DatabaseError: ('HY000', '[HY000] [Microsoft][ODBC SQL Server Driver]Connection is busy with results for another hstmt (0) (SQLExecDirectW)')
我正在尝试将数据从 SQL 服务器读取到 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: Execution failed on sql 'select distinct
top 500000 * from dbo.KrishAnalyticsAllCalls': ('HY000', '[HY000]
[Microsoft][ODBC SQL Server Driver]Connection is busy with results for
another hstmt (0) (SQLExecDirectW)')
我之前执行过该函数,但由于我想对函数进行更改,所以用 ctrl+k
中断了执行。现在,在我尝试执行该功能时进行更改后,出现上述错误。
由于我不知道任何 IPython 内核 运行 在函数中执行查询,我如何才能终止该 connection/IPython 内核?
我遇到了同样的问题。这在我使用 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)
解决了它。
希望这有帮助。
问题是由于游标恰好在 pd.read_sql_query() 命令之前执行所致。
Pandas 正在使用连接和 SQL 字符串来获取数据。不需要数据库游标。
#res = cur.execute(db_cmd)
sql_out = pd.read_sql_query(db_cmd, con, chunksize=10**6)
print(sql_out)
您很可能还没有连接到 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""")
然后转化为Pandas:
df = pd.DataFrame.from_records(sql.fetchall(),columns=[desc[0] for desc in sql.description])
我正在尝试将数据从 SQL 服务器读取到 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: Execution failed on sql 'select distinct top 500000 * from dbo.KrishAnalyticsAllCalls': ('HY000', '[HY000] [Microsoft][ODBC SQL Server Driver]Connection is busy with results for another hstmt (0) (SQLExecDirectW)')
我之前执行过该函数,但由于我想对函数进行更改,所以用 ctrl+k
中断了执行。现在,在我尝试执行该功能时进行更改后,出现上述错误。
由于我不知道任何 IPython 内核 运行 在函数中执行查询,我如何才能终止该 connection/IPython 内核?
我遇到了同样的问题。这在我使用 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)
解决了它。
希望这有帮助。
问题是由于游标恰好在 pd.read_sql_query() 命令之前执行所致。 Pandas 正在使用连接和 SQL 字符串来获取数据。不需要数据库游标。
#res = cur.execute(db_cmd)
sql_out = pd.read_sql_query(db_cmd, con, chunksize=10**6)
print(sql_out)
您很可能还没有连接到 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""")
然后转化为Pandas:
df = pd.DataFrame.from_records(sql.fetchall(),columns=[desc[0] for desc in sql.description])