1

私の Python アプリケーションは MSSQL データベースに接続していくつかの問題番号を確認しますが、この手順はデータの整合性を支援するためにのみ必要であり、ユーザーに追加機能を提供するものではありません。

データベースは、私のオフィスのローカル ネットワーク上でのみアクセスできます。起動時にユーザーの環境をチェックして、この接続が確立できるかどうかを確認するにはどうすればよいですか?

私は pyodbc を使用していますが、このプログラムが OS X でも動作する必要があるため、このチェックで肯定的な結果が返されるまで、そのモジュールをインポートしません。何か案は?

4

2 に答える 2

0

インポートする前に、ping を使用してホストが使用可能であることを確認します。

import subprocess

host = "<hostname>"
# add sample text for ping resolution errors here
errors = ("could not find", "unreachable")

ping = "ping {0}".format(host)
(stdout, stderr) = subprocess.Popen(ping, stdout=subprocess.PIPE).communicate()

# stdout is a byte string and must be decoded before compare
if not any(error in stdout.decode("utf-8") for error in errors):
    import pyodbc
    .....
于 2014-06-30T13:42:22.350 に答える
0

次のようなことを試すことができます:

#!/usr/bin/python
import socket

mssql_server = 'foobar.example.not' # set this to your own value
s = socket.socket()
s.settimeout(3)
try:
    server = [x for x in socket.getaddrinfo(mssql_server,1433) if x[0]==2 ][0][-1]
except socket.gaierror:
    server = None
if server:
    try:
        s.connect(server)
    except (socket.timeout, socket.error):
        server = None
s.close()

...これにより、サーバーのIPv4アドレスが検索され(によって返された最初のアドレスを使用getaddrinfo())、そのシステムのMS SQL TCPポート(デフォルトでは1433)への接続が試行されます。(はい、サーバーが別のポートにある場合は 1433 を変更してください)。試行時にタイムアウトまたはその他のソケット エラーが報告された場合、サーバーは に設定されNoneます。それ以外の場合は、アクセスできる MS SQL サーバーがある可能性があります。

于 2014-07-02T02:48:14.893 に答える