python - 为什么我可以使用 tsql 连接到 Azure MS SQL,但不能使用 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', 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

好的。嗯,这……很奇怪。因此,我返回并使用 TDSVER=7.2 尝试了 tsql,这似乎工作正常。

尝试连接 tds_version='7.2' 会得到:

Traceback (most recent call last):
  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 637, in _mssql.MSSQLConnection.__init__ (_mssql.c:6581)
  File "_mssql.pyx", line 1630, in _mssql.maybe_raise_MSSQLDatabaseException (_mssql.c:17524)
_mssql.MSSQLDatabaseException: (20002, b'DB-Lib error message 20002, severity 9:\nAdaptive Server connection failed (datawhse.database.
windows.net:1433)\n')

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "pymssql.pyx", line 641, in pymssql.connect (pymssql.c:10824)
pymssql.OperationalError: (20002, b'DB-Lib error message 20002, severity 9:\nAdaptive Server connection failed (datawhse.database.windo
ws.net:1433)\n')

那么,什么给出了呢?

更新 1: pyodbc 无法连接:

conn = pyodbc.connect('SERVER=example.database.windows.net;Driver=FreeTDS;<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="f0a5b9b4cd9d95b09588919d809c95de9491849192918395de87999e949f8783de9e9584" rel="noreferrer noopener nofollow">[email protected]</a>;PWD=notmyrealpassword;'
, ansi=True)

我的~/.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

最佳答案

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

我卸载了它:

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

关于python - 为什么我可以使用 tsql 连接到 Azure MS SQL,但不能使用 pymssql?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39129928/

相关文章:

sql-server - 共享连接到 Azure SQL 数据库的 PowerApp,无需共享凭据

Azure Blob 到 Azure SQL 表的创建

python - 用 Python 制作实时图表的好框架?

python - 在pandas中返回 float 而不是ndarray - python

azure - Windows Azure 表服务 - 扩展属性和表架构

Azure Web App : System. Security.Cryptography.CryptographicException: key 集不存在

entity-framework - Windows Azure : Web Page, 移动服务和 SQL

Python:内置键盘信号/中断

python - itertools 产品不应包含具有重复值的组合

azure - Windows azure 通知中心设备注册 native 与模板