如何在pyodbc包中检查上一条impala语句是否是select语句?

问题描述 投票:0回答:1

我想在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')

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

python pyodbc impala
1个回答
0
投票

同时,我已经能够产生一个解决方案,这似乎是工作在所需的方式。

基于写在 pyodbc 文件 用于光标属性 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

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

© www.soinside.com 2019 - 2024. All rights reserved.