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

Posted

技术标签:

【中文标题】如果最后一个 impala 语句是 select 语句,如何检查 pyodbc 包?【英文标题】:How to check in pyodbc package if last impala statement was a select statement? 【发布时间】:2020-05-14 11:01:50 【问题描述】:

我想要一个基于 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】:

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

根据pyodbcdocumentation 中为游标属性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

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

【讨论】:

以上是关于如果最后一个 impala 语句是 select 语句,如何检查 pyodbc 包?的主要内容,如果未能解决你的问题,请参考以下文章

Impala 中 SELECT 语句的算术运算

Apache Impala(五) Impala数据导入方式

FROM 语句的 Apache Impala 内部查询限制

在 IMPALA 脚本的插入语句中使用选择查询的结果

sql select语句,如何查找最后一行的数据

客快物流大数据项目(七十二):Impala sql 语法