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