db2 如何在使用Jupyter SQL Magic时关闭连接?

ibrsph3r  于 2022-11-07  发布在  DB2
关注(0)|答案(6)|浏览(180)

我正在使用SQL Magic连接到一个db2示例,但是,在查询完数据库后,我似乎找不到有关如何关闭连接的语法。

vfhzx4xs

vfhzx4xs1#

您不能使用JupyterSQLMagic显式关闭连接。实际上,这是使用JupyterSQLMagic连接到DB2的缺点之一。您需要关闭会话来关闭Db2连接。希望这对您有所帮助。

uklbhaso

uklbhaso2#

这可能不是很有用,而且在某种程度上,它可能不能保证在未来工作。但是如果你需要一个非常笨拙的方法来关闭连接,我可以这样做(对于postgres数据库,我假设它类似于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,并试图再次连接后,当你试图使用它时,它仍然认为连接关闭了。所以除非有人知道如何修复这种行为,否则这只在你不想在重新启动内核之前再次连接(使用相同的参数连接到相同的数据库)的情况下有用。

nue99wik

nue99wik3#

您也可以重新启动内核。

oalqel3c

oalqel3c4#

这是我发现的在会话结束时关闭所有连接的最简单的方法。你必须重新启动内核才能重新建立连接。

connections = %sql -l
[c.session.close() for c in connections.values()]
rt4zxlrg

rt4zxlrg5#

很抱歉迟到了,我刚刚开始使用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)
ctzwtxfj

ctzwtxfj6#

如果要关闭连接,请先注销笔记本。

相关问题