TDSVersion保持默认为7.1 pymssql

时间:2016-08-28 00:53:43

标签: python database azure-sql-database freetds pymssql

重要更改:

以下命令也有效,并为我提供正确的提示。然后必须存在pymssql的问题。

var lookup = db.Requirements.ToLookup(r => r.ID, r => r.Priority);

var priority = lookup[rowID].FirstOrDefault();

所以我和我的pymssql和freetds司机打架。

平台版本等:

Ubuntu 16.04

FreeTDS v0.91(由工作tsql使用)

FreeTDS v0.95(由pymssql使用)

pymssql v2.1.3

目标数据库:SQL Azure(最新)

安装说明:https://azure.microsoft.com/en-us/documentation/articles/sql-database-develop-python-simple/

我已经进入了每个freetds.conf文件,我可以找到:/etc/freetds/freetds.conf; /root/.freetds.conf

我已将全局TDS版本设置为8.0。我已经从我的pymssql.connect中的python透视图覆盖了将版本覆盖到8.0

sudo TDSVER=7.1 tsql -H asdf.database.windows.net -p 1433 -U adf@ad -P adsf#adf -D adf

我运行诊断工具:

tsql -C并返回4.2作为版本

我运行代码将日志转储到stdout,注意,版本是7.1。

net.c:202:连接到191.238.6.43端口1433(TDS版本7.1)

以下tsql命令对我有用......

import os
os.environ['TDSDUMP'] = 'stdout'
import pymssql  
conn = pymssql.connect(server='adsf.database.windows.net', 
                   user='asdf@adfs', 
                   password='asdf#adfad', 
                   database='asdd',
                   tds_version='8.0',
                   )

注意版本号。它的8.0。我可以验证我得到的数据,并可以做我想要的所有。

所以这里有一个明显的问题,就是pymssql如何与freetds挂钩。

以下是日志转储的所有输出,以防有人看到我无法正常的事情......

sudo TDSVER=8.0 tsql -H asdf.database.windows.net -p 1433 -U adf@ad -P adsf#adf -D adf

2 个答案:

答案 0 :(得分:2)

不幸的是你没有告诉我们:

  • 您希望实际使用哪种TDS版本。
  • 您正在使用哪个pymssql版本以及如何安装它

如果您正在尝试使用TDS 8.0并且看到pymssql + FreeTDS正在使用7.1那么您

a)不必担心因为它们是同一个东西。见http://www.freetds.org/userguide/choosingtdsprotocol.htm#AEN910

b)实际使用"7.1",因为FreeTDS 1.0不赞成使用"8.0"。见https://github.com/FreeTDS/freetds/blob/1855d0f72aadd998ab133208fcd3f4d168074ab5/NEWS#L6-L7

答案 1 :(得分:0)

似乎freetds v0.95与Ubuntu 16.04不兼容,也不是pymssql的最新版本,因为它附带v0.95并且看起来你可以做很多事情来交换它使用的版本进行。

我可以通过以下方式让这个工作:

sudo apt-get install freetds-dev freetds-bin
sudo pip3 install pymssql=2.1.1

另请注意,它不适用于Anaconda Interpreter。我只测试了Anaconda Interpreter和标准的CPython解释器。