如果最后一个impala语句是select语句,如何签入pyodbc包?

k7fdbhmy  于 2021-06-26  发布在  Impala
关注(0)|答案(1)|浏览(412)

我想有一个基于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')

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

rbpvctlc

rbpvctlc1#

在此期间,我已经能够产生一个解决方案,似乎在理想的方式工作。
根据上面写的 pyodbc 游标属性的文档 description ,属性“将 None 对于不返回行的操作或未调用某个execute方法的操作”。
请注意,如果您想改用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

也就是说,如果有更好的方法来处理这个问题,我还是很想听听。

相关问题