使用PYODBC和FreeTDS从SQL Server检索记录

时间:2014-06-18 16:44:00

标签: python sql sql-server pyodbc freetds

我有一个python脚本连接到本地SQL Server(2012,我相信?)并运行“SELECT * from ...”查询。当我运行脚本时,我收到一条错误消息:

File "/home/mdrouin/dev/redbus/wyndham.py", line 643, in connect

cursor.execute("SELECT * from [RentalDB].[dbo].[Clients]")

pyodbc.ProgrammingError: ('42000', '[42000] [FreeTDS][SQL Server]Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier. (4004) (SQLExecDirectW)')

在阅读了其他一些帖子之后,我尝试了一个建议,通过在我的脚本中添加以下内容来提及:

os.environ['TDSVER'] = '7.0'

然而,当我这样做时,我得到unicode转义字符串(我认为这就是他们被称为......),而不是数据。这是我从表中打印一行时的示例:

(u'\U00320035\U00380033\U00360033\U00300030\U00300030\U00300030\U00320031\U00320039\U00350039', u'\U00640041\U006d0061\U00520020\U004d0020\U00740061\U00690074\U0067006e\U0079006c\U00280020\U00590057\U0032004e\U00300031', u'\U00640061\U006d0061\U00390073\U006d006d', u'\U006f006a\U006e0068\U00650064\U00720065\U00390065\U00330034', u'\U00330032\U0031002e\U002e0039\U00310035\U0031002e\U00350031')

我没有得到的是我在一个与另一个VM设置完全相同的VM上运行它,其中一个VM运行良好而另一个没有运行。另一个VM没有这些问题。我检查了两台计算机上的odbc.ini和odbcinst.ini文件,它们完全一样,所以我不知道是什么原因引起了这些问题。两个虚拟机都在运行Debian 7。

1 个答案:

答案 0 :(得分:1)

没关系......我迟钝了。当我在没有工作的VM上设置Python中的VirtualEnv时,我不小心使用了Python 2.6而不是Python 2.7,后者只安装了PYODBC 2.x而不是PYODBC 3.x.旧版PYODBC导致了这些问题。