Python 为什么我可以使用tsql而不是pymssql连接到Azure MS SQL?

Python 为什么我可以使用tsql而不是pymssql连接到Azure MS SQL?,python,azure,azure-sql-database,pymssql,Python,Azure,Azure Sql Database,Pymssql,我今天的处境: TDSVER=7.3 tsql -H example.database.windows.net -U me -D ExampleDB -p 1433 -P notreallymypassword 这并不是: >>> import pymssql >>> pymssql.connect('example.database.windows.net', user='me', password='notreallymypassword', datab

我今天的处境:

TDSVER=7.3 tsql -H example.database.windows.net -U me -D ExampleDB -p 1433 -P notreallymypassword
这并不是:

>>> import pymssql
>>> pymssql.connect('example.database.windows.net', user='me', password='notreallymypassword', database='ExampleDB', tds_version='7.3')
它失败了

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "pymssql.pyx", line 635, in pymssql.connect (pymssql.c:10734)
  File "_mssql.pyx", line 1902, in _mssql.connect (_mssql.c:21821)
  File "_mssql.pyx", line 577, in _mssql.MSSQLConnection.__init__ (_mssql.c:6214)
  File "_mssql.pyx", line 1704, in _mssql._tds_ver_str_to_constant (_mssql.c:18845)
_mssql.MSSQLException: unrecognized tds version: 7.3
那么,有什么好处呢

更新1: pyodbc也无法连接:

conn = pyodbc.connect('SERVER=example.database.windows.net;Driver=FreeTDS;UID=me@example.database.windows.net;PWD=notmyrealpassword;'
, ansi=True)
My~/.odbcinst.ini:

[FreeTDS]
Description     = MS SQL driver
Driver          = /usr/lib64/libtdsodbc.so.0
Driver64        = /usr/lib64/libtdsodbc.so.0
Setup           = /usr/lib64/libtdsS.so.0
Setup64         = /usr/lib64/libtdsS.so.0
UsageCount      = 1
CPTimeout       =
CPReuse         =
Trace           = Yes
这个输出:

⚘ odbcinst -j
unixODBC 2.3.1
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/me/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

您的连接字符串看起来不正确。应该是这样的:

pymssql.connect(server='example.database.windows.net', user='me@example', password='notreallymypassword', database='ExampleDB')

请注意,在调用
connect()
的示例中,缺少一个
server=
参数;您只有完整的服务器名。

看起来Gord是对的:问题是
pymssql
wheel没有SSL绑定

我卸载了它:

python -m pip uninstall pymssql
然后从以下来源安装:

python -m pip install --no-binary pymssql pymssql
这需要我安装一些依赖项。但是现在我可以和你联系了

pymssql.connect('example.database.windows.net',
                user='me', 
                password='notreallymypassword', 
                database='ExampleDB',
                tds_version='7.2')

我的用户名就是
me
——这就是
tsql
的功能和作用。使用strace,我可以验证我是否实际连接到Azure服务器并接收数据。。。虽然这可能只是错误信息。不管怎样,我把它改成了
me@example
,并添加了
服务器=
(它仍然不工作)
server
是第一个参数,因此
pymssql.connect('example.database.windows.net')
pymssql.connect(server='example.database.windows.net'…)
你运行的是什么版本的
pymssql
freetds
呢?另外,请看Gord在这里关于SSL/TLS的回答:@FlipperPA我不在windows(CentOS)上,所以我不确定这是否适用,但似乎没有提到SSL/TLS(抄送:@FlipperPA)-“这篇MSDN文章似乎也没有提到SSL/TLS”-这篇文章特别提到Ubuntu,它与openssl一起提供,显然是为了让pip在构建pymssql时能够找到它而配置的。似乎CentOS并不总是如此,例如,
pip
不构建
pymssql
——它使用预构建的控制盘。至少我安装它时它下载了轮子。
pymssql.connect('example.database.windows.net',
                user='me', 
                password='notreallymypassword', 
                database='ExampleDB',
                tds_version='7.2')