2016-08-24 4 views
2

私は今日午前:Azure MS SQLにtsqlでは接続できますが、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を試してみましたが、これはうまくいくようでした。 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;[email protected];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 
+1

実行中の 'pymssql'と' freetds'のバージョンは何ですか? – FlipperPA

+0

また、SSL/TLSに関するGordの回答を参照してください。http://stackoverflow.com/questions/39040536/pymssql-on-windows-can-connect-to-local-sql-server-but-not-to-azure- sql – FlipperPA

+0

@FlipperPA私はウィンドウズ(CentOS)ではないので、それは当てはまりません[このMSDNの記事](https://msdn.microsoft.com/en-us/library/mt694094(v = sql .1).aspx)には、SSL/TLSについても言及していないようです。 –

答えて

3

Gordが正しいと思われます。問題は、pymssqlホイールに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') 
-1

あなたの名前ction文字列が正しく表示されません。 connect()にあなたの例の呼び出しでは、あなたがserver=パラメータが不足していることを

pymssql.connect(server='example.database.windows.net', user='[email protected]', password='notreallymypassword', database='ExampleDB') 

注;:それはのようなものでなければなりませんあなたは完全なサーバー名しか持っていませんでした。

+0

私のユーザ名は*ちょうど私のものです。それが 'tsql'の持つものです。 straceを使用すると、実際にAzureサーバーに接続してデータを受信して​​いることを確認できますが、これはたぶんエラーメッセージです。それにもかかわらず、私は 'me @ example'に変更し、' server = 'を追加しました(これは[必要でないようです](http://pymssql.org/en/latest/ref/pymssql.html#functions ))それはまだ動作しませんでした) –

関連する問題