首页 > 解决方案 > 即使连接关闭,Pandas read_sql_query 仍在后台运行?

问题描述

我有一个封闭的连接:

Config = dict(server = serverSample,
              port = 1433,
              username = username_input,
              password = password_input)
conn_str = (‘Server ={server},  {port}; + ‘TRUSTED_CONNECTION=yes’)
conn = pyodbc.connect(
    r’Driver={ODBC Driver 13 for SQL Server};’ + conn_str.format(**config)
)
Do = pd.read_sql_query(query, conn)
conn.close()

在我使用该read_sql_query方法后,我将数据放入DataFrame.

出于某种原因,数据人员通知我,我的连接仍在进行一段时间。

close方法是否实际上停止了 SQL 的运行,或者我必须做其他事情来阻止查询在服务器中运行?

我正在使用pyodbc.

标签: pythonsqlpandasdataframepyodbc

解决方案


这取决于您作为conn对象传递给read_sql_query方法调用的内容。

  1. 如果你传递Connection对象应该足够了,但问题可能出在你关闭连接的地方。也许此代码无法访问。

  2. 如果你传递Engine对象。您应该处理连接:

conn.dispose()
  1. 您也可以尝试关闭池。详细信息在线程中
import pyodbc


pyodbc.pooling = False
  1. 另一种选择是将连接用作context_manager而不commit关闭连接。这种方法是首选pyodbc
import pyodbc


conn = pyodbc.connect(config) 
with conn:
    crs = conn.cursor()
    do_stuff
    # conn.commit() will automatically be called when Python leaves the outer `with` statement
    # Neither crs.close() nor conn.close() will be called upon leaving the the `with` statement!! 

推荐阅读