因此,我在让 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 格式不正确?