【发布时间】:2025-12-06 17:55:01
【问题描述】:
我正在使用 SQL Magic 连接到一个 db2 实例。但是,当我查询完数据库后,我似乎无法在任何地方找到有关如何关闭连接的语法。
【问题讨论】:
标签: sqlalchemy db2 jupyter-notebook jupyter-lab
我正在使用 SQL Magic 连接到一个 db2 实例。但是,当我查询完数据库后,我似乎无法在任何地方找到有关如何关闭连接的语法。
【问题讨论】:
标签: sqlalchemy db2 jupyter-notebook jupyter-lab
您不能使用 Jupyter SQL Magic 显式关闭连接。事实上,这也是使用 Jupyter SQL Magic 连接 DB2 的缺点之一。您需要关闭会话才能关闭 Db2 连接。希望这会有所帮助。
【讨论】:
这可能不是很有用,并且在某种程度上它可能不能保证在未来工作。但是,如果您需要一种非常骇人听闻的方式来关闭连接,我可以这样做(对于 postgres db,我假设它对于 db2 类似):
In[87]: connections = %sql -l
Out[87]: {'postgresql://ngd@node1:5432/graph': <sql.connection.Connection at 0x7effdbcf6b38>}
In[88]: conn = connections['postgresql://ngd@node1:5432/graph']
In[89]: conn.session.close()
In[90]: %sql SELECT 1
...
StatementError: (sqlalchemy.exc.ResourceClosedError) This Connection is closed
[SQL: SELECT 1]
[parameters: [{'__name__': '__main__', '__doc__': 'Automatically created module for IPython interactive environment', '__package__': None, '__loader__': None, '__s ... (123202 characters truncated) ... stgresql://ngd@node1:5432/graph']", '_i28': "conn = connections['postgresql://ngd@node1:5432/graph']\nconn.session.close()", '_i29': '%sql SELECT 1'}]]
一个大问题是——如果你想重新连接,那似乎不起作用。即使在运行 %reload_ext sql 并尝试再次连接后,当您尝试使用它时它仍然认为连接已关闭。因此,除非有人知道如何修复该行为,否则只有在您不想在重新启动内核之前再次重新连接(到具有相同参数的同一个数据库)时断开连接才有用。
【讨论】:
你也可以重启内核。
【讨论】:
这是我发现在会话结束时关闭所有连接的最简单方法。您必须重新启动内核才能重新建立连接。
connections = %sql -l
[c.session.close() for c in connections.values()]
【讨论】:
很抱歉迟到了,但我刚刚开始使用 SQL Magic,并且对不断出现的错误感到恼火。这是一个有点尴尬的补丁,但这有助于我使用它。
def multiline_qry(qry):
try:
%sql {qry}
except Exception as ex:
if str(type(ex).__name__) != 'ResourceClosedError':
template = "An exception of type {0} occurred. Arguments:\n{1!r}"
message = template.format(type(ex).__name__, ex.args)
print (message)
qry = '''DROP TABLE IF EXISTS EMPLOYEE;
CREATE TABLE EMPLOYEE(firstname varchar(50),lastname varchar(50));
INSERT INTO EMPLOYEE VALUES('Tom','Mitchell'),('Jack','Ryan');
'''
multiline_qry(qry)
【讨论】:
如果要关闭连接,请先注销笔记本。
【讨论】: