13

Windows XP システムで実行されている SQL Server に、ローカル サーバー上の *nix システムから pymssql 経由で接続しようとしています。ただし、以下に示すように接続に失敗します

db = pymssql.connect(host='192.168.1.102',user='www',password='test',database='TestDB')
Traceback (most recent call last):

File "<stdin>", line 1, in <module>
File "pymssql.pyx", line 457, in pymssql.connect (pymssql.c:6041)
raise InterfaceError(e[0])
pymssql.InterfaceError: Connection to the database failed for an unknown reason.

私が試したこと:

  1. SQL Server とブラウザをネットワーク サーバーとして実行するように設定します。
  2. ユーザー「www」をセットアップします。また、このユーザーを SQL Studio でローカルにテストしました。
  3. Windowsファイアウォールをオフにしました(もちろん一時的に)。

私は何かが欠けています - 私はそれが何であるかわからないだけです。Windows ですべての無限メニュー オプションを試しましたが、役に立ちませんでした。私が気づいたことの 1 つは、Windows ファイアウォールがオンになっている場合 (SQL Server の例外をセットアップした場合)、python が長時間一時停止してからエラーが発生することです。ファイアウォールがオフの場合、エラーはすぐに発生します。

SQL Server で確認できるログはありますか?

4

3 に答える 3

14

とった!問題の原因は、Free TDS に必要な注意を払わなかったことだと思います。無料の TDS は明らかに pymssql の背後にあるドライバーであり、他のデータベースへの接続を提供します - SQL Server はその 1 つです。

freetds.conf ファイルは、私のシステム (Mac Book Pro) の /usr/local/etc にあります。

このファイルには、インストールのデフォルトが含まれています。ただし、以前に接続できるように定義を追加していましたが、それを忘れてしまい、残念ながらメモを取りませんでした。

とにかく、これは私が freetds.conf に追加したものの例です:

[SomeDB]
    host = 192.168.1.102
    port = 1219
    tds version = 7.0

ただし、不可解なのは、ポートを 1219 に設定したことです。SQL Studio で手動で 1433 に設定しました。また、TDS バージョン 0.82 を使用しているため、7.0 がどのように適合するかわかりません。

次に、次のように「tsql」を使用して接続をテストしました。

tsql -S SomeDB -U www

パスワードを入力すると、SQL クエリを実行できるコマンド ラインが表示されます。

次に、次のように pymssql を使用して接続をテストしました。

db = pymssql.connect(host='SomeDB',user='www',password='cylon',database='TestDB')

ご覧のとおり、IP を直接ではなく、freetds.conf ファイルのホスト名を使用する必要がありました。次に、Python コードを追加して簡単なクエリをテストし、データベースから確実に読み取れるようにしました。

これが将来誰かに役立つことを願っています。

于 2010-11-11T22:10:52.253 に答える
2

これは解決したようですが、Google からここにたどり着いた人は、MS SQL Server で混合モード認証がオンになっていることを確認してください。デフォルトでは、Windows 認証のみを許可するため、 でこのエラーが発生しpymssqlます。

于 2011-06-06T18:25:40.043 に答える
0

それはあなたが取り組んでいるウィンドウズマシンですか?ポート1433を指定します。これは、TCP/IPの代わりにNamedpipesを使用しようとするmssqlクライアントAPIのバグのようです。

于 2010-11-11T00:58:10.093 に答える