pyodbc 的雪花连接

问题描述 投票:0回答:1

我正在尝试通过 python2.7 中的

pyodbc
连接到 linux 中的雪花。 我已经在我的 RHEL7 机器上安装了
snowflake-odbc-2.25.8.x86_64.rpm
。 我在
odbc.ini
文件中做了这样的更改:

[testodbc2]  
Driver      = /usr/lib64/snowflake/odbc/lib/libSnowflake.so
Description =  
server      = <MY_ACCOUNT>.snowflakecomputing.com  
#PRIV_KEY_FILE_PWD = <MY_PASSWORD>  
AUTHENTICATOR = SNOWFLAKE_JWT  
SSL=on  

现在,如果在我的

PRIV_KEY_FILE_PWD = <MY_PASSWORD> 
中取消注释
odbc.ini
并执行以下行

conn_str_1 = "DSN={};UID={};PWD={};server={};schema={};role={};warehouse={};database={};PRIV_KEY_FILE={}".format(dsn_name, 
  user, password_str, "{}.snowflakecomputing.com".format(account), schema, role, warehouse, database, private_key_location)

 conn = pyodbc.connect(conn_str_1)

有效。但是一旦我在我的

PRIV_KEY_FILE_PWD = <MY_PASSWORD> 
中评论
odbc.ini
并尝试从我的代码中传递密码,就像这样:

conn_str_1 = "DSN={};UID={};PWD={};server={};schema={};role={};warehouse={};database={};PRIV_KEY_FILE={};PRIV_KEY_FILE_PWD ={}".format(dsn_name, 
  user, password_str, "{}.snowflakecomputing.com".format(account), schema, role, warehouse, database, private_key_location, MY_PASSWORD)

 conn = pyodbc.connect(conn_str_1)

开始失败并显示错误:

“错误:('HY000','[HY000] [雪花] [雪花](44) 错误完成设置:编组私钥失败。 (44) (SQLDriverConnect)')"

MY_PASSWORD 有“;”在里面。所以我试图通过
逃避它

MY_PASSWORD = MY_PASSWORD .replace(';', '\\;')
在传入 DSN 字符串之前,仍然是同样的错误。

但令我惊讶的是,在 odbc.ini 中 - 我按原样使用密码并且它正在工作,但如果我通过 dsn 字符串中的代码传递 - 它不起作用。

你认为 - 我在这里遗漏了什么。

python snowflake-cloud-data-platform odbc pyodbc
1个回答
0
投票

参考在连接字符串参数上说了以下内容。

此信息的格式为以分号分隔的键/值对(如有必要,值可以用大括号括起来)

有关详细信息,请参阅 ODBC 参考资料

所以,你应该像这样添加花括号。

...
conn = pyodbc.connect("...;PRIV_KEY_FILE_PWD={{{}}}").format(..., MY_PASSWORD)
// or 
conn = pyodbc.connect(f"...;PRIV_KEY_FILE_PWD={{{MY_PASSWORD}}}")
© www.soinside.com 2019 - 2024. All rights reserved.