Развертывание веб-приложения Azure: SQLAlchemy OperationalError с подключением к SQL Server для приложения Python FlaskPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Развертывание веб-приложения Azure: SQLAlchemy OperationalError с подключением к SQL Server для приложения Python Flask

Сообщение Anonymous »

Я впервые развертываю приложение Python Flask в Azure (бесплатная версия). У меня есть приложение Python Flask, которое подключается к базе данных SQL Server с помощью SQLAlchemy. Подключение к базе данных и таблицам происходит во время загрузки сайта. Локально это работает отлично. Однако при развертывании приложения в веб-приложении Azure я сталкиваюсь с проблемой таймаута соединения при попытке подключения к SQL Server. Приложение завершается с ошибкой OperationalError, указывающим на то, что время ожидания входа в систему истекло. Ниже приведена обратная трассировка ошибок:

Код: Выделить всё

Traceback (most recent call last):
File "/tmp/8dc4e3d6e3306fa/antenv/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 145, in __init__
self._dbapi_connection = engine.raw_connection()
...
pyodbc.OperationalError: ('HYT00', '[HYT00] [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired (0) (SQLDriverConnect)')
Эта проблема возникает только при развертывании приложения в Azure, а не при локальном запуске. Вот некоторые особенности среды и конфигурации:
Среда: веб-приложение Azure
База данных: SQL Server
Метод подключения: SQLAlchemy с использованием pyodbc в качестве драйвера
Версии зависимостей в файле require.txt:
  • cnos-connector==0.1.9
  • pyodbc== 5.1.0
  • SQLAlchemy==2.0.28
    Ошибка: время ожидания входа истек
У меня есть подтвердил, что приложение успешно подключается к базе данных из моей локальной среды, поэтому похоже, что это проблема, специфичная для развертывания Azure.
Вот как я настраиваю механизм SQLAlchemy в своем приложение:

Код: Выделить всё

user = os.environ["User_Name"]
password = os.environ["Password"]
hostName = os.environ["hostName"]
port = os.environ["port"]
db = os.environ["database"]
db_context = os.environ["context"]

# Establishing the database connection URI
database_uri = f"mssql+pyodbc://{user}:{password}@{hostName}:{port}/{db}?driver=ODBC+Driver+17+for+SQL+Server"
engine = create_engine(database_uri)
Все переменные среды написаны правильно и правильно добавлены в мое веб-приложение Azure в качестве переменных среды в настройках приложения.
Я пробовал увеличить значение параметр таймаута соединения (хотя я мог бы попробовать еще большее число). При локальном запуске загрузка приложения Flask занимает около 20–35 секунд из-за подключения к базе данных и запросов, которые я выполняю для настройки. Для получения дополнительной информации/контекста вот команда запуска, используемая для приложения flask:

Код: Выделить всё

gunicorn --bind=0.0.0.0 --timeout 600 app:app
Я проверил и подтвердил, что приложение работает локально и что все имена переменных среды совпадают с тем, что я написал на панели мониторинга веб-приложения Azure. Я не пробовал добавлять строку подключения на панель управления веб-приложения, так как не думаю, что это поможет, поскольку приложение отлично работает локально. Кроме того, SQL-сервер работает без сбоев для меня и других.
  • Кто-нибудь сталкивался с подобной проблемой с тайм-аутом соединений SQLAlchemy при развертывании приложения Python Flask в веб-приложение Azure?
  • Есть ли в Azure дополнительные конфигурации или параметры, которые могут отсутствовать и которые могли бы решить эту проблему с подключением?
  • Возможно ли это что у веб-сайта нет доступа к базе данных/серверу, а у моего локального устройства есть? Я могу получить доступ к базе данных через Wi-Fi компании или через специальную VPN, работая дома или в другом месте (локально на Python или через SSMS). Нужно ли мне настраивать интеграцию виртуальной сети (VNet) для моей службы приложений в той же сети, что и сервер SQL?
ОБНОВЛЕНИЕ:
  • Я добавил интеграцию виртуальной сети в веб-приложение, и оно должно иметь возможность без проблем взаимодействовать с SQL Server, но я все еще получаю ту же ошибку. Я подтвердил правильность переменных среды и использую os.environ['var1'], чтобы захватить их в свой код. Веб-сайт должен подключаться к базе данных/серверу SQL сразу после загрузки страницы (страница должна быть загружена с параметром, который в будущем передается в запрос к базе данных), поэтому я также установил все среды для строка подключения в переменных моей среды в качестве настроек слота развертывания.


Подробнее здесь: https://stackoverflow.com/questions/782 ... connection
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»