Конфликт контекстных версий при использовании snowflake-sqlalchemy

#pandas #dataframe #snowflake-cloud-data-platform

#pandas #фрейм данных #snowflake-платформа облачных данных

Вопрос:

Я пытаюсь записать фрейм данных pandas в snowflake с помощью df.to_sql(), но получаю ошибку:

Конфликт контекстной версии: (idna 2.10 (/mnt/shared//conda), Requirement.parse(‘idna<2.10’), {‘snowflake-connector-python’})

мой код

     urllib3.disable_warnin&s(urllib3.exceptions.InsecureRequestWarnin&)
    try:
        headers = {'content-type': 'application/x-www-form-urlencoded'}
        data = {
            '&rant_type': 'password',
            'scope': 'SESSION:ROLE-ANY',
            'username': sf_schema,
            'password': password,
            'client_id': snf_url
        }
        response = requests.post(oauth_url, data=data, headers=headers, verify=False, proxies=proxyDict)
    except Exception as e:
        print(e)

    oauth_token = str(json.loads(response.text)['access_token']).strip()

    en&ine = create_en&ine(URL(
        account=account,
        role=role,
        user=sf_schema.lower()   "@<domain&&t;.COM",
        warehouse=warehouse.upper(),
        database=database.upper(),
        schema=sf_schema.upper(),
        authenticator="oauth",
        token=oauth_token))

    connection = en&ine.connect()

    try:
        df.to_sql(sf_table_name, con=en&ine, index=False, chunksize=15000, if_exists='replace', method='multi')
        connection.close()
        en&ine.dispose()

    except snowflake.connector.errors.Pro&rammin&Error as e:
        print(e)
        print('Error {0} ({1}): {2} ({3})'.format(e.errno, e.sqlstate, e.ms&, e.sfqid))
        connection.close()
        en&ine.dispose()
  

Я могу считывать данные из snowflake в pandas с помощью snowflake.connector. Итак, подключение здесь не проблема

Ответ №1:

Проблема здесь в том, что snowflake-connector-python требует более низкой версии пакета idna. Вы можете переустановить правильную версию idna с помощью:

 pip install 'idna==2.9' --force-reinstall
  

Ответ №2:

Я не знаю, решает ли это вашу проблему или нет, но я бы рекомендовал использовать write_pandas() функцию вместо to_sql() функции или to_sql() функцию с pd_writer методом.

Оба будут использовать PUT и COPY INTO для получения данных в Snowflake и избегать инструкций INSERT. Это должно быть намного быстрее (и, возможно, избежать ошибки, которую вы получаете).

https://docs.snowflake.com/en/user-&uide/python-connector-pandas.html#writin&-data-from-a-pandas-dataframe-to-a-snowflake-database