通过 sqlalchemy 和 pyodbc 访问 MS SQL 数据库时出现“登录超时已过期”错误

2024-01-08

因此,我在让 sqlalchemy 和 pyodbc 与远程 MS SQL Server 一起使用时遇到了一些麻烦。本地 sqlcmd 工作正常,但当我尝试通过 python 代码读取数据库时却无法正常工作。任何帮助,将不胜感激。

环境:

  • Centos 7
  • SQLCmd 版本:版本 17.1.0000.1 Linux
  • 微软 SQL 服务器 6.01.7601.17514
  • Python 2.7

以下 sqlcmd 工作正常

sqlcmd -S {Host},{Port} -U {USER} -P {PWD} -Q "use {Database};"

尝试直接使用 sqlalchemy 或 pyodbc 没有成功。错误:

pyodbc.OperationalError: ('HYT00', u'[HYT00] [unixODBC][Microsoft][ODBC Driver 17 for SQL Server]登录超时已过期 (0) (SQLDriverConnect)')

代码: 尝试使用 pyodbc

conn = pyodbc.connect(
    r'DRIVER={ODBC Driver 17 for SQL Server};'
    r'SERVER=HOST,PORT;'
    r'DATABASE=DATABASE;'
    r'UID=UID;'
    r'PWD=PWD'
    )

尝试使用 sqlalchemy:

create_engine('mssql+pyodbc://{user}:{password}@{host}:{port}/{database}?driver={driver}'.format(
        user=user,
        password=password,
        host=host,
        database=database,
        port=port,
        driver="ODBC+Driver+17+for+SQL+Server"
    )).connect()

如果我从命令中删除端口,我可以使用 sqlcmd 重现错误,所以也许我传递给 pyodbc 的 conn_string 格式不正确?


该问题可能与 DNS 相关,您可以阅读here https://github.com/mkleehammer/pyodbc/issues/412.
尝试在连接字符串中使用 IP 地址而不是主机名,或者检查您的 DNS 配置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 sqlalchemy 和 pyodbc 访问 MS SQL 数据库时出现“登录超时已过期”错误 的相关文章

随机推荐