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)。如果尝试时报告超时或任何其他套接字错误,则 server 设置为None. 否则,您可能拥有可以访问的 MS SQL 服务器。

于 2014-07-02T02:48:14.893 回答