python 如何使用OAuth2将SQLAlchemy连接到Snowflake数据库?

e0bqpujr  于 2023-01-24  发布在  Python
关注(0)|答案(2)|浏览(147)

我需要使用SQLAlchemy连接到Snowflake,但诀窍是,我需要使用OAuth2进行身份验证。Snowflake文档只描述了使用用户名和密码进行连接,这在我构建的解决方案中无法使用。我可以使用Snowflake的python连接器进行身份验证,但我没有看到如何将其与SQLAlchemy粘合在一起的简单路径。在我为此编写自定义接口之前,我想知道是否有现成的解决方案。

4uqofj5v

4uqofj5v1#

使用snowflake.connector.connect创建到数据库的PEP-249连接-请参阅文档。然后使用create_engine(docs)的参数creator-它接受返回PEP-249连接的可调用对象。如果使用它,则URL参数将被忽略。
示例代码:

def get_connection():
    return snowflake.connector.connect(
        user="<username>",
        host="<hostname>",
        account="<account_identifier>",
        authenticator="oauth",
        token="<oauth_access_token>",
        warehouse="test_warehouse",
        database="test_db",
        schema="test_schema"
    )
engine = create_engine("snowflake://not@used/db", creator=get_connection)
vybvopom

vybvopom2#

我得到了这个工作,但只是在连接URL中添加更多的参数:

from sqlalchemy.engine import create_engine
import urllib.parse

connection_url = f"snowflake://{user}:@{account}/{database}/{schema}?warehouse={warehouse}&authenticator=oauth&token={urllib.parse.quote(access_token)}"
engine = create_engine(connection_url)

with engine.begin() as connection:
    print(connection.execute('select count(*) from lineitem').fetchone())

如果您不想自己构造URL,可以使用snowflake.sqlalchemy.URL,如下所示:

from snowflake.sqlalchemy import URL
connection_url = URL(
    user=user,
    authenticator="oauth",
    token=access_token,
    host=host,
    account=account,
    warehouse=warehouse,
    database=database,
    schema=schema
)

相关问题