为什么我可以使用tsql而不是pymssql连接到Azure MS SQL? [英] Why can I connect to Azure MS SQL with tsql but not pymssql?

查看:120
本文介绍了为什么我可以使用tsql而不是pymssql连接到Azure MS SQL?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我今天在哪里:

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,这似乎很好.

Okay. Well, that's... strange. So I went back and tried the tsql using TDSVER=7.2, which seemed to work fine.

尝试与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 无法连接:

Update 1: pyodbc also fails to connect:

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

我的〜/.odbcinst.ini:

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没有SSL绑定.

It looks like Gord was right: The problem was that pymssql wheel does not have SSL bindings.

我已将其卸载:

python -m pip uninstall pymssql

然后从源代码安装它:

python -m pip install --no-binary pymssql pymssql

这需要我安装一些依赖项.但是现在我可以连接

This required me to install a few dependencies. But now I can connect with

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

这篇关于为什么我可以使用tsql而不是pymssql连接到Azure MS SQL?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆