我正在尝试使用 Python 中的 Snowpark 和 Snowflake Connector 创建 Snowflake 会话。但是,我遇到了 TypeError 并显示以下错误消息:
TypeError:config() 缺少 1 个必需的位置参数:'value'
以下是相关代码片段:
import pandas as pd
import boto3 as ab
from snowflake.snowpark.session import Session
import snowflake.connector as sc
import os
from configparser import ConfigParser
config = ConfigParser()
config.read(os.path.dirname(__file__) + str("/DBConn/config.ini"))
cs = config.sections()
connection_parameters = {
"account": config.get(cs[0], 'account'),
"user": config.get(cs[0], 'user'),
"password": config.get(cs[0], 'password'),
"role": config.get(cs[0], 'defaultrole'), # optional
"warehouse": config.get(cs[0], 'defaultwarehouse'), # optional
"database": config.get(cs[0], 'defaultdatabase'), # optional
"schema": config.get(cs[0], 'defaultschema') # optional
}
sfSession = Session.builder.config(connection_parameters).create()
print(sfSession)
con = sc.connect(**connection_parameters)
print(con)
我已验证配置参数是否从 config.ini 文件中正确读取。但是,当在 Session.builder 上调用 config() 方法时,它会抛出 TypeError。看起来 config() 方法需要一个额外的位置参数,但我不确定它应该是什么。
我将非常感谢任何有关如何解决此问题的见解或建议。预先感谢您的帮助!
snowflake 文档中配置参数的参考 URL https://docs.snowflake.com/en/developer-guide/snowpark/python/creating-session
谢谢。
期望使用 Snowpark 从雪花建立会话
config()
需要键值对,而不是字典,只需修改代码为每个键值对调用一次 config() ,而不是传递字典。
sessionBuilder = Session.builder
for key, value in connection_parameters.items():
sessionBuilder.config(key, value)
sfSession = sessionBuilder.create()
请确保您使用的是最新的 Snowpark 版本,并且传递带有键值对的字典(两者都必须是字符串!!)
Session.builder.config
应该识别作为唯一参数传递的字典,如文档中所述:
创建会话:
- 创建一个包含名称和值的 Python 字典 (dict) 连接到 Snowflake 的参数。
- 将此字典传递给 Session.builder.configs 方法以返回 具有这些连接参数的构建器对象。
- 调用构建器的create方法建立会话。
https://docs.snowflake.com/en/developer-guide/snowpark/python/creating-session
如果您使用 dict 对象来创建 Snowpark 会话,请在 Session.builder
中使用
.configs
方法而不是
.config
方法
from snowflake.snowpark.session import Session
import os
from configparser import ConfigParser
config = ConfigParser()
config.read(os.path.dirname(__file__) + str("/DBConn/config.ini"))
cs = config.sections()
connection_parameters = {
"account": config.get(cs[0], 'account'),
"user": config.get(cs[0], 'user'),
"password": config.get(cs[0], 'password'),
"role": config.get(cs[0], 'defaultrole'), # optional
"warehouse": config.get(cs[0], 'defaultwarehouse'), # optional
"database": config.get(cs[0], 'defaultdatabase'), # optional
"schema": config.get(cs[0], 'defaultschema') # optional
}
sfSession = Session.builder.configs(connection_parameters).create()
print(sfSession)