Python 3.x 将助手类与Snowflake一起使用会导致连接问题
为了习惯通过python API连接到Snowflake,我在Snowflake文档中做了一些后续工作,但是我发现我的用例数量在增加,我需要增加一些灵活性。为了帮助我,我开始使用一个helper类,但是运行良好的代码会导致连接问题 以下是返回fine的代码:Python 3.x 将助手类与Snowflake一起使用会导致连接问题,python-3.x,snowflake-cloud-data-platform,Python 3.x,Snowflake Cloud Data Platform,为了习惯通过python API连接到Snowflake,我在Snowflake文档中做了一些后续工作,但是我发现我的用例数量在增加,我需要增加一些灵活性。为了帮助我,我开始使用一个helper类,但是运行良好的代码会导致连接问题 以下是返回fine的代码: import snowflake.connector from snowflake.connector import errors as sce import os from dotenv import load_dotenv load_
import snowflake.connector
from snowflake.connector import errors as sce
import os
from dotenv import load_dotenv
load_dotenv()
ctx = snowflake.connector.connect(
account=os.getenv('ACCOUNT'),
user=os.getenv('USER'),
password=os.getenv('SNOWSQL_PASSWORD'),
warehouse=os.getenv('WAREHOUSE'),
role=os.getenv('ROLE'),
database=os.getenv('DATABASE')
)
cur = ctx.cursor()
cur.execute(task_history)
query_id = cur.sfqid
results = cur.fetchall()
for result in results:
print(result)
正常运行后,我开始构建一个助手类,如下所示:
import snowflake.connector
from snowflake.connector import errors as sce
import os
from dotenv import load_dotenv
load_dotenv()
class TaskMonitor():
def __init__(self):
print('initializing task monitor')
self.account = os.getenv('ACCOUNT'),
self.user = os.getenv('USER'),
self.password = os.getenv('SNOWSQL_PASSWORD'),
self.warehouse = os.getenv('WAREHOUSE'),
self.role = os.getenv('ROLE'),
self.database = os.getenv('DATABASE')
def __connect__(self):
print('connecting to snowflake account')
self.ctx = snowflake.connector.connect(
account=self.account,
user=self.user,
password=self.password,
warehouse=self.warehouse,
role=self.role,
database=self.database
)
def fetch(self, sql):
self.__connect__()
self.cur = self.ctx.cursor()
print('sending select statement')
try:
self.cur.execute(sql)
query_id = self.cur.sfqid
print(query_id)
results = self.cur.fetchall()
for rec in results:
print(rec)
except sce.ProgrammingError as e:
print(e)
print('Error {0} ({1}): {2} ({3})'.format(e.errno, e.sqlstate, e.msg, e.sfqid))
finally:
self.ctx.close()
def execute(self, sql):
self.__connect__()
self.cur.execute(sql)
def test_connection(self):
self.__connect__()
tm = TaskMonitor()
tm.fetch('show tasks;')
问题是,当我运行代码时,我得到了一个连接错误
snowflake.connector.errors.OperationalError: 250003: Failed to execute request: HTTPSConnectionPool(host="('xxxxxxxxxxxxxxxxxxxxxxxxx',).snowflakecomputing.com", port=443): Max retries exceeded with url:xxxxxxxxxxxxxxxxxxxxxxxxxxxxx (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x000001842623E850>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed'))
snowflake.connector.errors.OperationalError:250003:无法执行请求:HTTPSConnectionPool(host=“('xxxxxxxxxxxxxxxxxxxxx',).snowflake computing.com”,port=443):url:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx超过最大重试次数(由NewConnectionError引起(':未能建立新连接:[Errno 11001]getaddrinfo失败])
感谢所有能指出我做错了什么的人 我认为您的问题在于以下代码:
def\uuuu初始化(自):
打印('正在初始化任务监视器')
self.account=os.getenv('account'),
self.user=os.getenv('user'),
self.password=os.getenv('SNOWSQL\u password'),
self.warehouse=os.getenv('warehouse'),
self.role=os.getenv('role'),
您在每行末尾都留下了逗号,可能是从您从snowflake.connector.connect
以前版本代码的一部分复制粘贴时开始的。Python在将值分配给类self
变量之前将其转换为tuple1
。删除逗号并使代码如下所示:
import snowflake.connector
from snowflake.connector import errors as sce
import os
from dotenv import load_dotenv
load_dotenv()
class TaskMonitor():
def __init__(self):
print('initializing task monitor')
self.account = os.getenv('ACCOUNT'),
self.user = os.getenv('USER'),
self.password = os.getenv('SNOWSQL_PASSWORD'),
self.warehouse = os.getenv('WAREHOUSE'),
self.role = os.getenv('ROLE'),
self.database = os.getenv('DATABASE')
def __connect__(self):
print('connecting to snowflake account')
self.ctx = snowflake.connector.connect(
account=self.account,
user=self.user,
password=self.password,
warehouse=self.warehouse,
role=self.role,
database=self.database
)
def fetch(self, sql):
self.__connect__()
self.cur = self.ctx.cursor()
print('sending select statement')
try:
self.cur.execute(sql)
query_id = self.cur.sfqid
print(query_id)
results = self.cur.fetchall()
for rec in results:
print(rec)
except sce.ProgrammingError as e:
print(e)
print('Error {0} ({1}): {2} ({3})'.format(e.errno, e.sqlstate, e.msg, e.sfqid))
finally:
self.ctx.close()
def execute(self, sql):
self.__connect__()
self.cur.execute(sql)
def test_connection(self):
self.__connect__()
tm = TaskMonitor()
tm.fetch('show tasks;')
def\uuuu初始化(自):
打印('正在初始化任务监视器')
self.account=os.getenv('account')
self.user=os.getenv('user'))
self.password=os.getenv('SNOWSQL\u password')
self.warehouse=os.getenv('warehouse'))
self.role=os.getenv('role'))
self.database=os.getenv('数据库')
谢谢您的帮助!我觉得自己像个白痴,但这解决了我的问题。不用担心。我不得不使用Pycharm调试器来找出它,因为我也完全忽略了它。