【问题标题】:Pandas read_sql_query still running in the background even though connection is closed?即使连接关闭,Pandas read_sql_query 仍在后台运行?
【发布时间】:2020-03-03 05:47:23
【问题描述】:

我有一个关闭的连接:

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的地方并关闭连接。
  • 我用更详细的代码编辑了我的问题。请告诉我它是否有效?
  • 你是在 Windows 机器上运行这个 Python 代码吗?
  • 是的,我在窗口机器上使用 anaconda
  • @DatNguyen - 好的,当“数据专家”说您的连接仍在“持续一段时间”时,他是否说大约需要多长时间?在 Windows 机器上,Microsoft 的 SQL Server ODBC 驱动程序的默认配置启用连接池,但默认超时仅为 60 秒,因此我不希望看到“关闭”连接挂起的时间比这更长。 (您可以检查 ODBC 管理器的“连接池”选项卡,以查看您的计算机上实际的“池超时”。)

标签: python sql pandas dataframe pyodbc


【解决方案1】:

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

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

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

conn.dispose()
  1. 您也可以尝试关闭池。 Details are in the thread:
import pyodbc


pyodbc.pooling = False
  1. 另一种选择是将连接用作context_managercommit,而不是关闭连接。 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!! 

【讨论】:

  • 我已经为代码提供了更详细的信息。您能否检查一下我的紧密连接是否在正确的位置?谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-02
  • 2021-05-17
  • 2016-05-21
  • 1970-01-01
  • 1970-01-01
  • 2014-03-26
  • 2017-06-14
相关资源
最近更新 更多