使用Python、FreeTDS和pyodbc从Raspberry Pi 3查询MSSQL server 2012

使用Python、FreeTDS和pyodbc从Raspberry Pi 3查询MSSQL server 2012,python,sql-server,raspberry-pi,pyodbc,freetds,Python,Sql Server,Raspberry Pi,Pyodbc,Freetds,我试图在raspberry Pi3上使用Python作为脚本语言查询MSSQL server 2012 我需要创建一个应用程序来查询MSSQL服务器并返回一些需要在H.M.I上显示的值。我选择Raspberry Pi平台来开发这个解决方案,使用Python作为编程语言。我在Windows7电脑上使用PyCharm创建了这个脚本,所有的脚本都运行良好。当我把它移到树莓平台时,它不工作了 我使用pyODBC进行连接和查询,FreeTDS作为驱动程序。我使用以下步骤设置此设置: sudo apt-g

我试图在raspberry Pi3上使用Python作为脚本语言查询MSSQL server 2012

我需要创建一个应用程序来查询MSSQL服务器并返回一些需要在H.M.I上显示的值。我选择Raspberry Pi平台来开发这个解决方案,使用Python作为编程语言。我在Windows7电脑上使用PyCharm创建了这个脚本,所有的脚本都运行良好。当我把它移到树莓平台时,它不工作了

我使用pyODBC进行连接和查询,FreeTDS作为驱动程序。我使用以下步骤设置此设置:

 sudo apt-get install freetds-dev freetds-bin unixodbc-dev tdsodbc
 pip3 install pyODBC
按如下方式配置/etc/freetds.conf文件

 [NAME]
 host = ipAddress
 port = 1433
 tds version = 7.4
 instance = dbInstanceName
然后,我转到命令行并使用以下命令测试连接:
tsql-sname-uusername
。然后,命令行提示使用
密码:
,因此我输入了密码,得到了以下信息:

 locale is "enGB.UTF-8"
 locale charset is "UTF-8"
 using default charset "UTF-8"
 1>
由于没有出现错误,我只能假设这是有效的

然后,我设置/etc/odbcinst.ini文件,如下所示:

 [FreeTDS]
 Driver = /usr/lib/arm-linux-gnueabihf/odbc/libtdsodbc.so
 [NAME1]
 Driver = /usr/lib/arm-linux-gnueabihf/odbc/libtdsodbc.so
 Description = MSSQL Server
 Trace = No
 Server = ipAddress
 Database = dbName
 Port = 1433
 TDS_Version = 7.4
然后,我设置/etc/odbc.ini文件,如下所示:

 [FreeTDS]
 Driver = /usr/lib/arm-linux-gnueabihf/odbc/libtdsodbc.so
 [NAME1]
 Driver = /usr/lib/arm-linux-gnueabihf/odbc/libtdsodbc.so
 Description = MSSQL Server
 Trace = No
 Server = ipAddress
 Database = dbName
 Port = 1433
 TDS_Version = 7.4
然后,我在命令行中用isql函数测试了这一点:
isql NAME1 user password
,并得到以下提示:

+-------------------------------------------------+
| Connected!
|
| sql-statement
| help [tablename] 
| quit
|
+-------------------------------------------------+

SQL> 
所以我输入了
select getDate()
,返回了日期和时间

但是在Python中,我仍然无法获得连接,我在解释器中键入了以下内容:

import pyodbc

conn = pyodbc.connect('DRIVER=FreeTDS;SERVER=NAME;DATABASE=dbName;UID=user;PWD=password')
然后,当我键入此
cu=conn.cursor()
时,我得到一个错误:

AttributeError: 'NoneType' object has no attribute cursor

问题在于您的连接字符串。以下是FreeTDS的完整连接字符串示例:

conn = pyodbc.connect(
    'DRIVER={FreeTDS};SERVER=yourfqdn.com;PORT=1433;DATABASE=your_db;UID=your_username;PWD=your_pw;TDS_Version=7.4;'
)

尝试将
{FreeTDS}
放在大括号中,并显式添加
TDS\u版本
。我还选择在Python连接字符串中使用FQDN,并将用户名/密码设置为环境变量,以将配置保留在一个较低的位置。

使用Raspbian&MS Sql server 2008在Raspberry pi2和Python 3上进行测试

确保您的APT Get库和Python版本是最新的”

运行以下命令以安装需求

在终端中,现在运行:(使用'pip3',因为由于一些错误,pyodbc不会为pip(python2)安装)

像这样更改freeTDS.conf

然后设置/etc/odbcinst.ini文件,如下所示:

 [FreeTDS]
 Driver = /usr/lib/arm-linux-gnueabihf/odbc/libtdsodbc.so
 [NAME1]
 Driver = /usr/lib/arm-linux-gnueabihf/odbc/libtdsodbc.so
 Description = MSSQL Server
 Trace = No
 Server = ipAddress
 Database = dbName
 Port = 1433
 TDS_Version = 7.4
然后设置/etc/odbc.ini文件,如下所示:

 [FreeTDS]
 Driver = /usr/lib/arm-linux-gnueabihf/odbc/libtdsodbc.so
 [NAME1]
 Driver = /usr/lib/arm-linux-gnueabihf/odbc/libtdsodbc.so
 Description = MSSQL Server
 Trace = No
 Server = ipAddress
 Database = dbName
 Port = 1433
 TDS_Version = 7.4
现在用这个命令测试连接(使用第二个命令,您应该可以访问Sql server的命令行)

最后是代码部分:

import pyodbc
conn = pyodbc.connect('DRIVER={FreeTDS};Server=Server2;PORT=1433;DATABASE=Test1;UID=user;PWD=pass;TDS_Version=7.2;')
cursor = conn.cursor()
cursor.execute("Select * from Table1")
for row in cursor.fetchall():
    print (row)
最后,如果没有任何效果,请尝试以下方法:

sudo dpkg-reconfigure tdsodbc

我将尝试将RPI3连接到SQL Server中的我的数据库,以捕获GPIO状态/值

我已经在使用一个名为Webiopi的web服务器,python用于执行宏,并定义GPIO函数/值

有可能吗

If(possible == yes)
  {
     happiness = happiness + 10;
     return view(success)
  }
else
  {
     happines = 0;
     return view(keep_searching);
  }

TY

您是否设置了名称、数据库名称、用户和密码值以使连接成功?提示:另外请注意,连接函数的参数为单个字符串。您好BoboDarph,谢谢您的回复,我已将用户和密码设置为真实值。您好FlipperPA,谢谢您的回复。我现在已更改了我的连接字符串为'DRIVER={FreeTDS};SERVER=ipAddress;PORT=1433;DATABASE=dbName;UID=user;PWD=password;TDS_Version=7.4;'但不幸的是,它仍然无法连接!我打赌你没有FreeTDS1.0,它是第一个支持
TDS_Version=7.4
的。你能试试
TDS_Version=7.1
吗?如果可以,试试7.2和7.3?如果你能告诉我免费的版本是什么您正在运行的TDS(使用
tsql-C
)我可以肯定地告诉您支持的最大TDS版本是什么。您好FlipperPA,谢谢您的回复。您是对的,我安装了版本0.91。还有一行内容是TDS版本4.2。还有一件事,我将iPAddress显式声明为SERVER=192.168.4.212。这是否需要放在大括号中?只有
DRIVER={DRIVER}
需要放在大括号中。版本
0.91
支持的最大
TDS\U版本
7.2
。我对此有一个PR,但文档尚未更新:
TDS版本4.2
来自
[全局]
freetds.conf
中的设置。在
pyodbc.connect()
字符串中传递
TDS\u Version=7.2
应覆盖此设置。
If(possible == yes)
  {
     happiness = happiness + 10;
     return view(success)
  }
else
  {
     happines = 0;
     return view(keep_searching);
  }