python - 在 Mac 上使用 isql 和 python 连接到远程 MSSQL 2016?

标签 python macos tsql pyodbc freetds

目标:通过 Python 连接到远程 MSSQL 2016 服务器。

主要方法:密切关注https://github.com/mkleehammer/pyodbc/wiki/Connecting-to-SQL-Server-from-Mac-OSX中的教程。

问题:能够通过 tsql 连接,但 isql 无法工作。错误

[S1000][unixODBC][FreeTDS][SQL Server]Unable to connect to data source
[37000][unixODBC][FreeTDS][SQL Server]Login failed for user 'DOMAIN\user-p'
[37000][unixODBC][FreeTDS][SQL Server]Cannot open database "TIT_BI_OPERATIONS" requested by the login. The login failed.

尝试过的事情:

  1. 不同的 ODBC 驱动程序 13.1、17、FreeTDS
  2. 用户名中包含/排除转义字符。
  3. 主机名与主机 IP。

设置: odbc.ini

[ODS_DSN]
Description = Connection to ODS MS_SQL 2016
Driver = FreeTDS
Servername = ODS_DSN
Port = 40000
Database = TIT_BI_OPERATIONS

odbcinst.ini

[FreeTDS]
Driver=/usr/local/lib/libtdsodbc.so
Setup=/usr/local/lib/libtdsodbc.so
UsageCount=1

freetds.conf

[ODS_DSN]
host = 164.10.17.77
port = 40000
tds version = 7.4
client charset = UTF-8

注释:

  • 尽管如此,在不先通过 tsql 和 isql 连接的情况下运行 python 不太有希望,但我仍然尝试但没有成功。使用 pyodbc、pypodbc、sqlalchemy。
  • 表单中的大多数错误:用户“DOMAIN\user-p”登录失败
  • 对于 ODBC 驱动程序 13:无法打开库“/usr/local/lib/libmsodbcsql.13.dylib”
  • 我可以使用完全相同的凭据通过 SQL PRO STUDIO 进行连接。

如果您有任何想法可以从哪个方向摆脱这个连接问题,我们将不胜感激。谢谢!

最佳答案

如果您使用 Windows 域身份验证,则必须使用 FreeTDS。奇怪的是,Microsoft ODBC 驱动程序不支持 Windows 域身份验证,仅 FreeTDS 支持。

由于您可以使用 tsql 命令进行连接,这意味着 FreeTDS 正在运行。我建议直接从 Python 显式连接。尝试像这样的连接字符串:

import pyodbc

con = pyodbc.connect(
    r"DRIVER={FreeTDS};"
    r"SERVER=164.10.17.77;"
    r"PORT=40000;"
    r"DATABASE=TIT_BI_OPERATIONS;"
    f"UID=DOMAIN\\user-p;"
    f"PWD=yourpassword;"
    r"TDS_Version=7.3;"
)

cursor = con.cursor();

cursor.execute("SELECT 'this' AS that")

for row in cursor.fetchall():
    print(row)

请注意,您确实需要在 UID 字段中使用两个反斜杠来连接 Windows 域身份验证;这不是一个错字!

关于python - 在 Mac 上使用 isql 和 python 连接到远程 MSSQL 2016?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59217547/

相关文章:

python - 自定义装饰器中的 Tornado 异步操作

python - 无法在pycharm中使用pabot运行并行robotframework测试

xcode - 如何返回 App Temp 目录

objective-c - 使用 NSComboBox 进行 Cocoa 绑定(bind)

SQL 查询为列中的每个唯一值返回一条记录

python - 使用三次样条在 Pandas 中插值时间序列

python - 被 GradientBoostingClassifier 的 apply 函数搞糊涂了

xcode - 创建发布版本时项目找不到框架

tsql - T SQL : How get all minutes from Time type

sql - 为什么这个 'WHEN THEN' SQL 查询没有返回预期的结果?