локальная переменная ‘cursor’, на которую ссылаются перед назначением

#python-3.x #google-cloud-functions #snowflake-cloud-data-platform

#python-3.x #google-cloud-функции #snowflake-cloud-data-platform

Вопрос:

Я пытаюсь подключиться к базе данных snowflake, но там указано, что локальная переменная ‘cursor’, на которую ссылаются перед назначением. Я что-то упустил в коде?

Вот скриншот ошибки:

введите описание изображения здесь

И вот мой код:

 def Source_database(self, source):

        try:
            print('######################################Cursor creation on database#################################')
              if source['systemType'] == 'mysql':
         '''block of code'''
        exception: 
             print("")
              elif source['systemType'] == 'snowflake':
      
                 try:

                   snowflake_connection = None
                   source_db_name = 'xxx'
                   source_db_username = 'xxx'
                   source_db_password = 'xxx'
                   source_db_port = 'xx'
                   source_db_endpoint = 'xxx'
                   source_db_warehouse = 'xx'
                   schema_name = 'xx'
                   with closing(sf.connect()) as conn:
                        with closing(conn.cursor()) as cursor:
                            snowflake_connection = sf.connect(user=source_db_username,password=source_db_password,
                                                            warehouse=source_db_warehouse, database=source_db_name,schema=schema_name,
                                                            account= source_db_endpoint)
                            print('Success')
                            #cursor = snowflake_connection.cursor()
                            self.engine = snowflake_connection
                            print("Snowflake Cursor created Successfully")
                except Exception as e:
                    print("Snowflake Cursor is not built please check the connection details {}".format(e))
  

Комментарии:

1. Добро пожаловать в SO. Пожалуйста, опубликуйте полную обратную трассировку.

2. Где инициализируется ваша sf переменная? Я не вижу, где это происходит.

3. @SimonD Спасибо за ваш комментарий. Я решил эту проблему. Основной причиной этой проблемы является конечная точка, где мне не нужно указывать имя домена, но в основном коде я передал имя домена. Snowflake добавит доменное имя для конечной точки.

Ответ №1:

Основной причиной этой проблемы является конечная точка, где мне не нужно указывать доменное имя для базы данных snowflake. Но в основном коде я передал доменное имя, и Snowflake также попытается добавить доменное имя для конечной точки. Эта проблема решена. Спасибо всем за ваши ценные предложения.

Ответ №2:

Насколько я знаю, класс connection не имеет элемента cursor

 elif source['systemType'] == 'snowflake':
                try:
                    snowflake_connection = None
                    source_db_name = 'xxx'
                    source_db_username = 'xxx'
                    source_db_password = 'xxx'
                    source_db_port = 'xx'
                    source_db_endpoint = 'xxx'
                    source_db_warehouse = 'xx'
                    schema_name = 'xx'
                    with closing(sf.connect()) as conn:
                        with closing(sf.cursor()) as cursor:
                            snowflake_connection = sf.connect(user=source_db_username,password=source_db_password,
                                                            warehouse=source_db_warehouse, database=source_db_name,schema=schema_name,
                                                            account= source_db_endpoint)
                            print('Success')
                            #cursor = snowflake_connection.cursor()
                            self.engine = snowflake_connection
                            print("Snowflake Cursor created Successfully")
                except Exception as e:
                    print("Snowflake Cursor is not built please check the connection details {}".format(e))
  

Попробуйте это

Комментарии:

1. Пытаясь выполнить приведенный выше код, я получаю сообщение об ошибке: «Выполнение функции заняло 60004 мс, завершено со статусом: ‘тайм-аут’

2. Что это за функция. Можете ли вы включить ее в свой код?