Драйвер ODBC 17 для SQL Server: Клиент не может установить соединение, macOS, django, odbc
Все работало, пока я не перезагрузил свой ноутбук.
У меня такая установка:
- python 3.8.9
- django 3.1.1
- pyodbc 4.0.30
pyodbc.drivers()
показывает следующее:['ODBC Driver 17 for SQL Server']
- SQLServer
openssl version
показывает следующее:OpenSSL 1.1.1l 24 Aug 2021
isql -v -k "DRIVER=ODBC Driver 17 for SQL Server;SERVER=<my server>,<my port>;UID=<my username>;PWD=<my password>"
подключается к базе данных без проблем- имя сервера, порт, пользователь и пароль, похоже, верны, так как jdbc драйвер работает с ними без проблем.
cat /etc/odbcinst.ini
иcat /etc/odbc.ini
- оба возвращают следующее:
[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/usr/local/lib/libmsodbcsql.17.dylib
UsageCount=10
odbcinst -j
возвращает следующее:
unixODBC 2.3.9
DRIVERS............: /usr/local/etc/odbcinst.ini
SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources
USER DATA SOURCES..: /Users/sgalich/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
- в настройках django:
DATABASES = {
'default': {
'ENGINE': 'mssql',
'NAME': os.environ.get('DB_NAME'),
'USER': os.environ.get('DB_USER'),
'PASSWORD': os.environ.get('DB_PASSWORD'),
'HOST': os.environ.get('DB_HOST'),
'PORT': os.environ.get('DB_PORT'),
'OPTIONS': {
'driver': 'ODBC Driver 17 for SQL Server',
},
},
}
cat ~/.bash_profile
показывает следующее:
export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"
export CPATH="/usr/local/opt/openssl@1.1/include"
export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"
export LIBRARY_PATH="/usr/local/opt/openssl@1.1/lib"
export DYLD_LIBRARY_PATH="/usr/local/opt/openssl@1.1/lib"
export DYLD_FALLBACK_LIBRARY_PATH="/usr/local/opt/openssl@1.1/lib"
Я переустановил драйвер ODBC с помощью этой официальной инструкции Microsoft . Но это не помогло. Я по-прежнему не могу запустить сервер django и сталкиваюсь с этой ошибкой:
- odbc log показывает следующее:
Все ответы, которые мне удалось найти, не помогли, включая этот ответ: ODBC не может найти правильную версию OpenSSL после обновления OpenSSL
Довольно странно, что все работало в течение длительного времени, пока я не перезагрузил свой ноутбук (без обновления ОС, просто перезагрузка). Может быть эта проблема связана с экспортом некоторых переменных с путем? Пожалуйста, помогите мне решить эту проблему.
Я столкнулся с аналогичной проблемой - вы пытались проверить, есть ли на сервере какой-либо брандмауэр и внесен ли ваш ip-адрес в белый список?
У меня точно такая же ошибка при аналогичной настройке. Вы также работаете на mac M1? У меня все работало нормально, пока я не начал устанавливать вещи для работы в x86-64 Intel arch. Перешел обратно на arm64 python, но все равно не смог заставить его работать снова. Возможно, что-то недавно обновилось? jdbc у меня тоже работает нормально.
Я не уверен, смогли ли вы найти это. Но следующее решение сработало для меня. Мой odbc не мог найти ssl версии 1. Я сделал следующее: В моем /usr/local/opt/
rm openssl
или
rm openssl@3
Идея заключается в том, чтобы удалить ссылку на любой openssl, на который она указывает. Вы можете также проверить с помощью вашего поисковика.
Затем создайте новую ссылку, указывающую на openssl1.1
ln -s /usr/local/Cellar/openssl@1.1/1.1.1l_1 /usr/local/opt/openssl
Дайте мне знать, помогло ли вам это, чтобы мы могли найти решение.
У меня была точно такая же ошибка с аналогичной настройкой. Поскольку я работаю на макбуке M1, я обнаружил, что моя проблема была в установке Python на Intel x86-64, но драйверы msodbcsql/unixodbc работали на Arm64.
Убедитесь, что это ваша проблема, выполнив следующие команды:
% file $(which odbcinst)
% file $(which isql)
% file $(which python3)
В результате должно получиться:
- Мах-О 64-битный исполняемый файл x86_64, или
- Mach-O 64-битный исполняемый файл arm64
Все должно возвращать один и тот же результат. Если один из них отличается, это ваша проблема.
Если это ваш случай, определите, в какой арке вы должны находиться, и переустановите компоненты в правильной арке.
В моем случае мне пришлось использовать Rosetta Terminal для установки brew в Intel arch (/usr/local/bin/brew) и установки всех компонентов вместе с ним.
Теперь мой pipenv запускает python в Intel и использует драйверы Intel odbc. Папки установки:
% file $(which python3)
/usr/local/bin/python3: Mach-O 64-bit executable x86_64
% file $(which isql)
/usr/local/bin/isql: Mach-O 64-bit executable x86_64
% file $(which odbcinst)
/usr/local/bin/odbcinst: Mach-O 64-bit executable x86_64