【问题标题】:Fetching a returned row of a query on MS SQL Server with sqlalchemy and pyodbc使用 sqlalchemy 和 pyodbc 在 MS SQL Server 上获取查询的返回行
【发布时间】:2014-08-29 06:46:59
【问题描述】:

我正在尝试通过执行行插入来获取返回的行。我直接在 SQL Server 上测试了编译后的 sql,查询工作正常,并且正确返回了一行。

问题是我无法从查询中获取返回的行。这是我的代码,我在 Windows 上使用 pyodbc 驱动程序。

sql = """
    INSERT INTO mytable (id, name)
    OUTPUT Inserted.id, Inserted.name
    VALUES (...)
    """
result = db.execute(sql).fetchall()

这是我得到的错误:

ERROR:  Failed to save events: (Error) ('HY010', '[HY010] [Microsoft][ODBC SQL Server Driver]Function sequence error (0) (SQLFetch)') None None
Traceback (most recent call last):
  File "...\site-packages\sqlalchemy\engine\result.py", line 782, in fetchall
    l = self.process_rows(self._fetchall_impl())
  File "...\site-packages\sqlalchemy\engine\result.py", line 749, in _fetchall_impl
    return self.cursor.fetchall()
pyodbc.Error: ('HY010', '[HY010] [Microsoft][ODBC SQL Server Driver]Function sequence error (0) (SQLFetch)')

有什么想法吗?提前致谢!

【问题讨论】:

  • 无法使用 SQL Server Native Client 11.0 和 pyodbc 3.0.7 在 Windows x64 上重现,而不是使用 sqlalchemy。如果从组合中删除 sqlalchemy,您会看到类似的行为吗?
  • 我看到类似但不同的行为 - 插入有效,但 sqlalchemy 没有返回任何行。我正在使用 sqlalchemy 和 pymssql。

标签: python sql-server sqlalchemy pyodbc


【解决方案1】:

您没有执行查询。您正在写入不应返回结果的数据库。相反,请尝试以下方法:

# assuming db is your cursor
db.execute(sql) # inserts the data
result = db.execute('SELECT * FROM mytable').fetchall()

【讨论】:

  • INSERT 语句包含一个 OUTPUT 子句,所以是的,它实际上期望返回结果。
猜你喜欢
  • 2015-08-02
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
  • 1970-01-01
  • 2013-03-22
  • 2020-07-08
  • 1970-01-01
  • 2021-08-21
相关资源
最近更新 更多