如果最后的impala语句是select语句,如何检查pyodbc包?

时间:2020-05-14 11:01:50

标签: python pyodbc impala

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

失败,并显示错误:没有返回结果集。因此,我想检查是否有返回结果,如果没有理由返回任何内容,请跳过。

1 个答案:

答案 0 :(得分:0)

同时,我已经能够提出一种似乎可以按预期方式工作的解决方案。

基于针对游标属性pyodbcdescription documentation中编写的内容,对于不返回行的操作或如果其中之一返回行,则属性“ None”将为rowcount=-1尚未调用execute方法。”

请注意,如果您想改用rowcount属性,则在impala中将无法使用它,因为即使存在非空结果集,您也会得到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

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

contextInitialized(ServletContextEvent sce)

话虽这么说,如果有更好的方法来解决这个问题,我还是很想听听。