Pandas read_sql_query 即使连接已关闭,仍然 运行 在后台?
Pandas read_sql_query still running in the background even though connection is closed?
我有一个关闭的连接:
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
。
这取决于您将什么作为 conn
对象传递给 read_sql_query
方法调用。
如果你传递 Connection
对象应该就足够了,但问题可能出在你关闭连接的地方。也许这段代码无法访问。
如果传递Engine
对象。你应该处理连接:
conn.dispose()
- 您也可以尝试关闭池化。 Details are in the thread:
import pyodbc
pyodbc.pooling = False
- 另一种选择是将连接用作
context_manager
和 commit
并且不关闭连接。 This approach is preferred by 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!!
我有一个关闭的连接:
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
。
这取决于您将什么作为 conn
对象传递给 read_sql_query
方法调用。
如果你传递
Connection
对象应该就足够了,但问题可能出在你关闭连接的地方。也许这段代码无法访问。如果传递
Engine
对象。你应该处理连接:
conn.dispose()
- 您也可以尝试关闭池化。 Details are in the thread:
import pyodbc
pyodbc.pooling = False
- 另一种选择是将连接用作
context_manager
和commit
并且不关闭连接。 This approach is preferred bypyodbc
:
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!!