Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 将助手类与Snowflake一起使用会导致连接问题_Python 3.x_Snowflake Cloud Data Platform - Fatal编程技术网

Python 3.x 将助手类与Snowflake一起使用会导致连接问题

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_

为了习惯通过python API连接到Snowflake,我在Snowflake文档中做了一些后续工作,但是我发现我的用例数量在增加,我需要增加一些灵活性。为了帮助我,我开始使用一个helper类,但是运行良好的代码会导致连接问题

以下是返回fine的代码:

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调试器来找出它,因为我也完全忽略了它。