我想在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')
它失败的错误是没有结果集返回。所以我想检查是否有一个我应该返回的结果,如果没有理由返回,则跳过。
同时,我已经能够产生一个解决方案,这似乎是工作在所需的方式。
基于写在 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
也就是说,如果有更好的方法来处理这个问题,我还是很想听听。