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

Connecting Raspberry Pi 3 to MSSQL Server using pyodbc

我目前正在尝试通过 Raspbian Stretch Lite(2017 年 11 月)将我的 raspberry pi 3 连接到 MSSQL 服务器。我正在关注 this guide 并将驱动程序和设置字段替换为

Driver=/usr/lib/arm-linux-gnueabihf/odbc/libtdsodbc.so
Setup=/usr/lib/arm-linux-gnueabihf/odbc/libtdsS.so

就像有人在评论部分建议的那样,匹配我的 pi 上的路径。当我尝试通过 python 脚本与

连接时
conn = pyodbc.connect('DRIVER=FreeTDS;SERVER<IP_OR_HOSTNAME>;PORT=1433;DATABASE<DATABASE_NAME>;UID=<USERNAME>;PWD=<PASSWORD>;')

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

我也试图让 the official MS Drivers 工作,使用 Debian 9 版本,但我无法设法安装软件包,因为 msodbcsql 仍然无法在 curl 命令后找到并且apt-get update.

我是不是错过了让 FreeTDS 工作的东西,或者脚本卡住意味着 pi 无法连接到服务器?还有其他方法可以让 pi 连接到 MSSQL 吗?

提前致谢。

我正在使用以下基于 Raspian 的 dockerfile to connect my Raspberry Pi 3 to a remote SQL Express database. It should document all steps needed. My Pi is running 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"]

所以基本上是三个步骤:

  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')

从 ARM Linux 开发板连接到 MS SQL 服务器的另一种选择是使用 pytds——我的基于 ARM 的 ASUS Tinker 对我来说就像一个魅力在 Debian 9 上登上 运行。

pytds 与 MS ODBC 驱动程序或 "Free TDS" 相比没有太多依赖性,您只需安装 pip 包就可以了。据我了解,这是因为 TDS 协议实现是在 Python 本身中编写的。

这里有一些细节:https://github.com/denisenkom/pytds

pip install python-tds