使用 pyodbc 将 Raspberry Pi 3 连接到 MSSQL Server

Tom*_*dil 5 python sql-server pyodbc raspbian raspberry-pi3

我目前正在尝试将我的树莓派 3 与 Raspbian Stretch Lite(2017 年 11 月)连接到 MSSQL Server。我遵循本指南并将驱动程序和设置字段替换为

Driver=/usr/lib/arm-linux-gnueabihf/odbc/libtdsodbc.so
Setup=/usr/lib/arm-linux-gnueabihf/odbc/libtdsS.so
Run Code Online (Sandbox Code Playgroud)

正如有人在评论部分提出的那样,匹配我的 pi 上的路径。当我尝试通过 python 脚本连接时

conn = pyodbc.connect('DRIVER=FreeTDS;SERVER<IP_OR_HOSTNAME>;PORT=1433;DATABASE<DATABASE_NAME>;UID=<USERNAME>;PWD=<PASSWORD>;')
Run Code Online (Sandbox Code Playgroud)

其中 <> 填充了正确的字符串,我的脚本卡在这一行而不打印任何内容,直到我执行键盘中断。

我还尝试使用 Debian 9 版本让官方 MS 驱动程序正常工作,但我无法安装这些软件包,因为msodbcsql仍然无法在curl 命令和apt-get update.

我是否缺少一些让 FreeTDS 工作的东西,或者脚本卡住是否意味着 pi 无法连接到服务器?还有其他方法可以将 pi 连接到 MSSQL 吗?

先感谢您。

Pho*_*log 3

我正在使用以下dockerfile将 Raspberry Pi 3 连接到远程 SQL Express 数据库。它应该记录所需的所有步骤。我的 Pi 运行的是基于 Raspian 的HypriotOS 。

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"]
Run Code Online (Sandbox Code Playgroud)

所以基本上是三个步骤:

  1. 安装 PyODBC 和 tds 的依赖项
  2. 编辑/etc/odbcinst.ini
  3. 安装 PyODBC,例如:pip install pyodbc

在我的代码中,我可以像这样连接到数据库:

connection = pyodbc.connect(driver='{FreeTDS}',
                            server='111.66.111.66\SQLEXPRESS',
                            uid='sa', pwd='notmyactualpw')
Run Code Online (Sandbox Code Playgroud)