【问题标题】:pyodbc - OPENQUERY support?pyodbc - OPENQUERY 支持?
【发布时间】:2019-07-12 07:33:39
【问题描述】:

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')

我收到“在 sql 42000 上执行失败”错误代码和“找不到存储过程 'SQL'2812”。

上述打开的查询在 SQL Server Management Studio 中工作。

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

Code Source

【问题讨论】:

  • "上述打开的查询在 SQL Server Management Studio 中有效。" - 不,它没有:Unclosed quotation mark after the character string ')

标签: sql sql-server python-3.x pyodbc openquery


【解决方案1】:

是的,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))]

【讨论】:

    猜你喜欢
    • 2016-08-15
    • 2019-02-09
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 2018-04-19
    • 2013-10-03
    相关资源
    最近更新 更多