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

前端之家收集整理的这篇文章主要介绍了sql-server – 通过sqlalchemy和pyodbc访问MS SQL数据库时出现“登录超时已过期”错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我在sqlalchemy和pyodbc使用远程MS sql Server时遇到了一些麻烦.本地sqlcmd工作正常但不是当我尝试通过 python代码读取数据库时.任何帮助,将不胜感激.

环境:

> Centos 7
> sqlCmd版本:版本17.1.0000.1 Linux
> MS sql Server 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] [用于sql Server的ODBC驱动程序17]登录超时已过期(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. 尝试在连接字符串中使用IP地址而不是主机名,或检查DNS配置.

猜你在找的MsSQL相关文章