Код: Выделить всё
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
База данных: SQL Server
Метод подключения: SQLAlchemy с использованием pyodbc в качестве драйвера
Версии зависимостей в файле require.txt:
- cnos-connector==0.1.9
- pyodbc== 5.1.0
- SQLAlchemy==2.0.28
Ошибка: время ожидания входа истек
Вот как я настраиваю механизм 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)
Я пробовал увеличить значение параметр таймаута соединения (хотя я мог бы попробовать еще большее число). При локальном запуске загрузка приложения Flask занимает около 20–35 секунд из-за подключения к базе данных и запросов, которые я выполняю для настройки. Для получения дополнительной информации/контекста вот команда запуска, используемая для приложения flask:
Код: Выделить всё
gunicorn --bind=0.0.0.0 --timeout 600 app:app
- Кто-нибудь сталкивался с подобной проблемой с тайм-аутом соединений SQLAlchemy при развертывании приложения Python Flask в веб-приложение Azure?
- Есть ли в Azure дополнительные конфигурации или параметры, которые могут отсутствовать и которые могли бы решить эту проблему с подключением?
- Возможно ли это что у веб-сайта нет доступа к базе данных/серверу, а у моего локального устройства есть? Я могу получить доступ к базе данных через Wi-Fi компании или через специальную VPN, работая дома или в другом месте (локально на Python или через SSMS). Нужно ли мне настраивать интеграцию виртуальной сети (VNet) для моей службы приложений в той же сети, что и сервер SQL?
- Я добавил интеграцию виртуальной сети в веб-приложение, и оно должно иметь возможность без проблем взаимодействовать с SQL Server, но я все еще получаю ту же ошибку. Я подтвердил правильность переменных среды и использую os.environ['var1'], чтобы захватить их в свой код. Веб-сайт должен подключаться к базе данных/серверу SQL сразу после загрузки страницы (страница должна быть загружена с параметром, который в будущем передается в запрос к базе данных), поэтому я также установил все среды для строка подключения в переменных моей среды в качестве настроек слота развертывания.
Подробнее здесь: https://stackoverflow.com/questions/782 ... connection