我正在尝试通过 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 字符串中的代码传递 - 它不起作用。
你认为 - 我在这里遗漏了什么。