我的Python應用程序連接到MSSQL數據庫以驗證某些問題編號,但此步驟僅用於幫助數據完整性並且不會爲用戶提供任何其他功能。檢查用戶的網絡環境 - Python應用程序
數據庫只能在辦公室的本地網絡上訪問。如何在啓動過程中檢查用戶的環境以查看是否可以建立連接?
我使用的是pyodbc,但我也需要這個程序才能在OS X上工作,所以我不會導入那個模塊,直到這個檢查返回一個肯定的結果。有任何想法嗎?
我的Python應用程序連接到MSSQL數據庫以驗證某些問題編號,但此步驟僅用於幫助數據完整性並且不會爲用戶提供任何其他功能。檢查用戶的網絡環境 - Python應用程序
數據庫只能在辦公室的本地網絡上訪問。如何在啓動過程中檢查用戶的環境以查看是否可以建立連接?
我使用的是pyodbc,但我也需要這個程序才能在OS X上工作,所以我不會導入那個模塊,直到這個檢查返回一個肯定的結果。有任何想法嗎?
你可以嘗試這樣的事:
#!/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服務器。
驗證主機可用使用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
.....
我認爲這會奏效!我明天將在工作中測試它,看看它是如何發展的。感謝您的幫助,呃! – rchav9
這將是我的備份計劃,如果我不能得到熊熊的工作答案。謝謝吉姆。 – rchav9
您的問題標籤指示SQL Server,它很可能在默認端口1433上運行。 – Bryan
啊。我的錯誤,我剛剛回答了一個不同的問題,那就是MySQL而不是MS SQL。 –