Python Azure Сбой функции с AttributeError ('__ enter__') после обновления Azure Основные инструменты - PullRequest
0 голосов
/ 05 августа 2020

У меня есть сценарий Azure Function Python. Он имеет триггер http, подключается к базе данных MySQL, получает строки из таблицы и обрабатывает их. Я использую VS Code для его разработки и тестирования с помощью Python vEnv. (он же нажат F5, чтобы запустить его локально)

Раньше он работал отлично в течение долгого времени, но неделю go Я обновил свой VS Code и Azure основные инструменты, внес небольшие изменения, развернул и теперь он не работает, при запуске в Azure выдает некоторую ошибку crypti c AttributeError('__enter__'). Итак, я вернулся к VS Code, запустил его в vEnv, и он там отлично работает. Таким образом, проблема возникает только при работе с Azure функциями.

Google не очень помог. Мне удалось обнаружить, что это может относиться к части with для pymysql. Я провел некоторую отладку с ведением журнала прямо перед и после блока with, и, похоже, он потерпел неудачу именно там. Но я застрял и не знаю, как дальше отлаживать.

Это не связано с изменением кода, которое я сделал, я убежден, что что-то произошло, когда я обновил среду выполнения VS Code Azure Functions или что-то в самом Azure изменилось.

Я установил Python 3.8.2 64-bit vEnv и Azure версию основных инструментов 3.0.2630

Вот, казалось бы, важная часть кода:

def getDbData(connection,table):
    with connection: 
        cur = connection.cursor()
        cur.execute(f"SELECT * FROM {table}")
        rows = cur.fetchall()

    if len(rows) > 0:
        logging.info(f'Got {len(rows)} entries from {table} SQL table!')
        connection.commit()
        for row in rows:
            logging.info(f'do something with each row')
    else:
        logging.info(f'Did not get any results from {table} SQL table!')
        connection.commit()


connection = pymysql.connect(host='hostname',user='SA',password='Passw',db='database',charset='utf8',use_unicode=True,cursorclass=pymysql.cursors.DictCursor)

dbindex = getDbData(connection,"dbTable")
...