pyodbc - OPENQUERY 支持?

pyodbc - OPENQUERY support?

Python版本:3.7.4
PyODBC 版本:4.0.26-cp37

我正在尝试连接到 Microsoft SQL 服务器。我正在使用以下代码并且能够使用标准查询来查询数据库:

示例 1:

cnxn = pyodbc.connect("Driver={SQL Server Native Client 11.0};"
                      "Server=SERVER-A;"
                      "Database=DATABASE-A;"
                      "uid=xxx,pwd=yyy")

df = pd.read_sql_query('SELECT * FROM DATABASE-A.dbo.XXX')

但是我需要执行的查询是:

SELECT * FROM OPENQUERY(SERVER-B, SELECT DateTime = convert(nvarchar, DateTime, 21), item1,item2,item3 FROM TableY')

我收到 "Execution failed on sql 42000" 错误代码 & "Could not find stored procedure 'SQL' 2812"。

以上打开的查询在 SQL Server Management Studio 中有效。

我不确定错误是由于字符串语法还是库不支持打开的查询。

是的,pyodbc 确实支持 OPENQUERY。以下对我来说很好用:

print('Info: Python version ' + sys.version)
# Info: Python version 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 21:26:53) [MSC v.1916 32 bit (Intel)]
print('Info: pyodbc version ' + pyodbc.version)
# Info: pyodbc version 4.0.26

connection_string = 'DRIVER=ODBC Driver 17 for SQL Server;SERVER=(local)\SQLEXPRESS;DATABASE=myDb;Trusted_Connection=yes;UseFMTONLY=Yes;'
cnxn = pyodbc.connect(connection_string, autocommit=True)
crsr = cnxn.cursor()

sql = "SELECT * FROM OPENQUERY([SERVER-B], 'SELECT item1,item2,item3 FROM TableY')"
print(crsr.execute(sql).fetchall())
# [(1, 'HoHoHo', datetime.datetime(2019, 12, 25, 0, 0))]