如何使用 SSO (sqlalchemy) 将 python 连接到 Snowflake?

How to connect python to Snowflake using SSO (sqlalchemy)?

我最近不得不使用 Okta 启用 SSO,并且我在 Google Colab 中 运行 有几个 python 项目。

我正在尝试重新设计连接字符串,但似乎无法正确完成。

这是我在 SSO 之前的初始连接字符串:

from snowflake.sqlalchemy import URL
from sqlalchemy import create_engine

engine = create_engine(URL(
    account = acc,
    user = usr,
    password = psw,
    warehouse = whs,
    role = rol
))
engine.connect()

这是我从研究中发现的,它应该与 SSO 一起使用:

from snowflake.sqlalchemy import URL
from sqlalchemy import create_engine

engine = create_engine(URL(
    account = acc,
    user = usr,
    password = psw,
    warehouse = whs,
    role = rol
),
connect_args={
        'authenticator': 'https://myokta.okta.com/',
        }
)
engine.connect()

我试过了,但我收到了这个错误:

我也尝试使用 {'authenticator': 'externalbrowser'} 但因为我在 Google Colab 中,所以我收到一条错误消息 Unable to open a browser in this environment..

Web UI 为同一个用户工作,所以我只是在 Colab 中遇到了这个问题。

我应该如何连接?

编辑: 所以在做了一些研究之后,我发现因为我们启用了 MFA,所以这是行不通的。是否可以使用:

engine = create_engine(URL(
    account = acc,
    user = usr,
    warehouse = whs,
    role = rol,
    authenticator = 'externalbrowser'
))
engine = engine.connect()

externalbrowser 成为同一笔记本中的 iframe?

我设法找到了解决方案。当 运行 engine.connect()authenticator='externalbrowser' 和 Google Collab 无法打开单独的选项卡时,它会提供一个手册 link,点击后会打开另一个选项卡指向以 localhost URL 为参数。然后我复制此 URL 并在返回笔记本时,将此 URL 粘贴到单元格中打开的输入框。