首页 > 解决方案 > 如果最后一个 impala 语句是 select 语句,如何检查 pyodbc 包?

问题描述

我想有一个基于 pyodbc 包的函数,它对 impala 运行查询,如果有东西要获取,则获取结果,否则,只需执行语句。不幸的是,我不知道如何检查我是否有东西要取。

def execute_my_query(connection, query):
    cur = connection.cursor()
    cur.execute(query)
    res = cur.fetchall()
    return res

不幸的是,如果我执行没有结果集的事情,例如:

execute_my_query(con, 'drop table if exists my_schama.my_table')

它失败并出现没有返回结果集的错误。所以我想检查是否有我应该返回的结果,如果没有理由返回任何东西,则跳过。

标签: pythonpyodbcimpala

解决方案


与此同时,我已经能够产生一种似乎以所需方式工作的解决方案。

根据cursor attributepyodbc 文档description中所写的内容,该属性“将None用于不返回行的操作或未调用其中一种执行方法的操作”。

请注意,如果您想改用 rowcount 属性,这在 impala 中不起作用,因为rowcount=-1即使存在非空结果集,您也会得到。

因此,可以将问题中的函数重写为:

def execute_my_query(connection, query):
    res = None 
    cur = connection.cursor()
    cur.execute(query)
    if cur.description is not None:
        res = cur.fetchall()
    return res

话虽如此,如果有更好的方法来处理这个问题,我还是很想听听。


推荐阅读