gpt4 book ai didi

python - 使用 key 对身份验证的 Snowflake 的 SQLAlchemy engine.connect() 失败

转载 作者:行者123 更新时间:2023-12-01 21:44:58 24 4
gpt4 key购买 nike

我的目标是能够使用 to_sql() 函数将 pandas 数据帧写入 Snowflake。我能够使用 read_sql() 从 Snowflake 成功查询,没有任何问题。似乎 to_sql() 需要一个我无法弄清楚的稍微不同的配置。我尝试了下面概述的两种不同方法。

我在猜测,但 key 对身份验证似乎是问题所在,这可能是错误的。当我在这两种方法中删除私钥参数时,我都会收到密码丢失的错误,而不是我收到的特别不清楚的错误。也许没有指定密码会使尝试短路,我真的遇到了另一个问题。

或者,如果有更好的方法将整个 pandas 数据框写入 Snowflake,我很乐意接受其他选择。

方法一雪花连接器

编辑:如果连接不是 SQLAlchemy 连接,那么 sqllite 似乎是唯一受支持的数据库

此方法因 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)

方法二——SQLAlchemy引擎

我找到了有关如何将私钥用于 SQLAlchemy 的文档。但是,它在调用 engine.connect() 时失败并显示 ValueError: Invalid IPv6 URL...

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)

这两个错误的回溯都很长,但如果有助于解决问题,我很乐意发布它们。

最佳答案

我不知道 #2 有什么问题,但我发现结合 #1 和 #2 会起作用...

import snowflake.connector
from sqlalchemy import create_engine

conn = snowflake.connector.connect(
account=acct,
warehouse=wh,
database=db,
schema=sc,
user=usr,
private_key=pkb,
)

engine = create_engine(f"snowflake://{acct}.snowflakecomputing.com", creator=lambda: conn)

try:
with engine.connect() as c:
# Note: the table name MUST be all lowercase for some reason, even though Snowflake uses all caps
df.to_sql('TABLENAME'.lower(), con=c, if_exists='replace', index=False)
finally:
engine.dispose()
conn.close()

关于python - 使用 key 对身份验证的 Snowflake 的 SQLAlchemy engine.connect() 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60870620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com