首页 > 解决方案 > 无法在 Raspbian 10(Buster)上为 SQL Server 获取 ODBC 驱动程序 17

问题描述

我试图在我的树莓派上安装“ODBC Driver 17 for SQL Server”但没有成功。

1 这是我试过的

FROM arm32v7/python:3

RUN apt-get update

1. Install dependencies for PyODBC and tds
RUN apt-get install -y tdsodbc unixodbc-dev
RUN apt install unixodbc-bin -y
RUN apt-get clean -y
2. Edit /etc/odbcinst.ini
RUN echo "[FreeTDS]\n\
Description = FreeTDS unixODBC Driver\n\
Driver = /usr/lib/arm-linux-gnueabi/odbc/libtdsodbc.so\n\
Setup = /usr/lib/arm-linux-gnueabi/odbc/libtdsS.so" >> /etc/odbcinst.ini
3. Install requirements (contains pyodbc)
COPY ./requirements.txt /usr/src/app/requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
Copy and run my app
COPY . .
CMD [ "python", "app.py"]

我的代码:

import pyodbc 
def inserare(operator,loc_munca,comanda,stare,data,ora,bucati):
    conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=.\SQLEXPRESS;DATABASE=database;UID=pi;PWD=pass')
    cursor = conn.cursor()
    cursor.execute("insert into Pontaj values (?,?,?,?,?,?,?)",operator,loc_munca,comanda,stare,data,ora,bucati)
    cursor.commit()
    cursor.close()

来自 python 外壳的错误

pyodbc.Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib >'ODBC Driver 17 for SQL Server': 找不到文件 (0) (SQLDriverConnect)")

来自终端的错误

sudo apt-get install freetds-dev freetds-bin unixodbc-dev tdsodbc 读取包列表...完成 构建依赖树
读取状态信息...完成 包 tdsodbc 不可用,但被另一个包引用。这可能意味着该软件包丢失、已过时或只能从其他来源获得

E: 无法定位软件包 freetds-dev

E: 无法定位软件包 freetds-bin

E: 包 'tdsodbc' 没有安装候选

标签: sql-serverpython-3.xdebianpyodbcunixodbc

解决方案


我设法通过修改 /etc 上的 odbc.ini 和 odbcinst.in 解决了这个问题。修改这些文件后,我能够连接到数据库。我认为 ODBC 17 是空白的,这就是问题所在。

odbc.ini

Driver = FreeTDS
Description = My Test Server
Trace = No Server
Name = mssql
Port = port
instance = ip\SQLEXPRESS
Database = yourdatabase
TDS_Version = 4.2

odbcinst.ini

Description=FreeTDS 
Driver v0.91
Driver=/usr/lib/arm-linux-gnueabihf/odbc/libtdsodbc.so
Setup=/usr/lib/arm-linux-gnueabihf/odbc/libtdsS.so
fileusage=1
dontdlclose=1
UsageCount=1

推荐阅读