Для подтверждения настройки:
apk update && apk add build-base unixodbc-dev freetds-dev
pip install pyodbc
Зачем устанавливать unixodbc и freetds?Для установки pip в Pyodbc требуются пакеты в unixodbc-dev и библиотеки gcc в build-base, так что обойти это невозможно.Драйвер freetds, как правило, имеет меньше проблем с pyodbc и сильно зависит от pymssql
, который я использовал в докере вместо pyodbc.Это личное предпочтение, однако, вы можете просто включить драйвер unixodbc.Теперь, чтобы найти драйвер
import pyodbc
pyodbc.drivers()
# []
Pyodbc не может найти их, но они определенно установлены, поэтому мы можем найти их с помощью сценария оболочки:
find / -name *odbc.so
/usr/lib/libtdsodbc.so
/usr/lib/libodbc.so
Теперь мыможно автоматизировать это с помощью библиотеки subprocess
для установки местоположения драйвера вручную:
import subprocess
s = subprocess.Popen('find / -name *odbc.so -type f', stdout=subprocess.PIPE, shell=True).communicate()
f, _ = s
# You can change this particular loop to select whatever driver you prefer
driver = [driver for driver in f.decode().split() if 'tds' in driver][0]
driver
# '/usr/lib/libtdsodbc.so'
username = 'someuser'
server = 'someserver'
database = 'somedatabase'
conn = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password)
В качестве альтернативы, вы можете добавить конфигурацию в /etc/odbcins.ini
, как упоминалось здесь :
[FreeTDS]
Description=FreeTDS Driver
Driver=/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Тогда
import pyodbc
pyodbc.drivers()
['FreeTDS']