У меня есть сценарий 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")