Как подключить SQLAlchemy к базе данных Snowflake с помощью OAuth2?

#python #oauth-2.0 #sqlalchemy #snowflake-cloud-data-platform #snowflake-connector

#python #oauth-2.0 #sqlalchemy #snowflake-cloud-data-platform #snowflake-connector

Вопрос:

Мне нужно подключиться к Snowflake с помощью SQLAlchemy, но хитрость в том, что мне нужно пройти аутентификацию с помощью OAuth2. Документация Snowflake описывает только подключение с использованием имени пользователя и пароля, и это не может быть использовано в решении, которое я создаю. Я могу пройти аутентификацию с помощью python connector Snowflake, но я не вижу простого пути, как склеить его с SQLAlchemy. Я хотел бы знать, есть ли готовое решение, прежде чем я напишу для этого пользовательский интерфейс.

Ответ №1:

Используется snowflake.connector.connect для создания подключения PEP-249 к базе данных — см. Документацию. Затем используйте param creator of create_engine (docs) — он принимает вызываемый объект, который возвращает соединение 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)