Моя цель - записать pandas фрейм данных в Snowflake с помощью функции to_sql()
. Я могу успешно запросить от Снежинки, используя read_sql()
без проблем. Похоже, что to_ sql () требует немного другой конфигурации, которую я не могу понять. Я пробовал два разных подхода, которые я обрисовал в общих чертах ниже.
Я предполагаю, но могу ошибаться из-за проблемы с аутентификацией пары ключей. Когда я удаляю параметр закрытого ключа в обоих подходах, я получаю ошибку, что пароль отсутствует, а не особо непонятные ошибки, которые я получаю в противном случае. Возможно, отсутствие указанного пароля приводит к короткому замыканию попытки, и у меня действительно есть другая проблема.
С другой стороны, если есть лучший способ записать целый pandas фрейм данных в Snowflake, я рад принять другие варианты ,
Метод 1 Snowflake Connector
edit: кажется, что sqllite является единственной поддерживаемой базой данных, если соединение не является соединением SQLAlchemy .
Этот подход не работает с DatabaseError: Execution failed on sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=?;': not all arguments converted during string formatting
import snowflake
conn = snowflake.connector.connect(
account=acct,
warehouse=wh,
database=db,
schema=sc,
user=usr,
private_key=pkb,
)
df.to_sql('TABLENAME', con=conn, if_exists='replace', index=False)
Метод 2 - SQLAlchemy Engine
Я нашел документацию о том, как использовать закрытый ключ с SQLAlchemy. Тем не менее, происходит сбой при ValueError: Invalid IPv6 URL
при вызове engine.connect()
...
from snowflake.sqlalchemy import URL
from sqlalchemy import create_engine
engine = create_engine(URL(
account=acct,
warehouse=wh,
database=db,
schema=sc,
user=usr,
connect_args={
'private_key': pkb,
}
))
with engine.connect() as conn:
df.to_sql('TABLENAME', con=conn, if_exists='replace', index=False)
Отслеживание обеих этих ошибок очень длинное, но я рад опубликовать их, если это поможет устранить неполадки .