我的Python应用程序连接到MSSQL数据库以验证某些事项编号,但此步骤仅用于协助数据完整性,并且不会为用户带来任何其他功能。
只有在我办公室的本地网络上才能访问数据库。如何在启动期间检查用户的环境以查看是否可以建立此连接?
我正在使用pyodbc,但我还需要这个程序才能在OS X上运行,所以我不会导入该模块,直到此检查返回肯定结果。有任何想法吗?
答案 0 :(得分:0)
导入前验证主机是否可用:
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
.....
答案 1 :(得分: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服务器。