Я пытаюсь подключить скрипт Python 2.7 к хранилищу данных SQL Azure.
Часть кода завершена, и тесты работают в нашей среде разработки. Мы пишем код на Python 2.7 для MacOS X и подключаемся к ADW через ctds.
Проблема возникает при развертывании на нашем модуле Azure Kubernetes (запущенном Debian 9).
Когда мы пытаемся создать соединение таким образом:
# init a connection
self._connection = ctds.connect(
server='myserver.database.windows.net',
port=1433,
user="my_user@myserver.database.windows.net",
timeout=1200,
password="XXXXXXXX",
database="my_db",
autocommit=True
)
мы получаем исключение, которое печатает только имя пользователя
my_user@myserver.database.windows.net
тип исключения
_tds.InterfaceError
Развернутый код точно такой же, а также требования.
Документация, найденная нами для этого исключения, практически отсутствует.
Ребята, вы это узнаете? Вы знаете, как мы можем обойти это?
Мы также пробовали в наших старых экземплярах AWS EC2 и AWS Kubernetes (которые используют ту же ОС, что и Azure), и это также не работает.
Нам удалось подключиться к ADW через sqlcmd, что доказывает, что модуль может действительно подключиться (я полагаю).
РЕДАКТИРОВАТЬ: решено. ТОЛЬКО ИЗМЕНЕНО ДЛЯ PYODBC
def connection(self):
""":rtype: pyodbc.Connection"""
if self._connection is None:
env = '' # whichever way you have to identify it
# init a connection
driver = '/usr/local/lib/libmsodbcsql.17.dylib' if env == 'dev' else '{ODBC Driver 17 for SQL Server}' # my dev env is MacOS and my prod is Debian 9
connection_string = 'Driver={driver};Server=tcp:{server},{port};Database={db};Uid={user};Pwd={password};Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;'.format(
driver=driver,
server='myserver.database.windows.net',
port=1433,
db='mydb',
user='myuser@myserver',
password='XXXXXXXXXXXX'
)
self._connection = pyodbc.connect(connection_string, autocommit=True)
return self._connection