python - 如果最后一个 impala 语句是 select 语句,如何检查 pyodbc 包?
问题描述
我想有一个基于 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')
它失败并出现没有返回结果集的错误。所以我想检查是否有我应该返回的结果,如果没有理由返回任何东西,则跳过。
解决方案
与此同时,我已经能够产生一种似乎以所需方式工作的解决方案。
根据cursor attributepyodbc
文档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
话虽如此,如果有更好的方法来处理这个问题,我还是很想听听。
推荐阅读
- linux - 写入主机操作系统的目录 - 使用 docker-compose 文件传递指令
- c# - 使用 MimeKit 和默认电子邮件发送邮件
- jmeter - Jmeter点对点测试计划出错
- python - 如何在 Python 中选择最后的 3 个日期
- html - SQLite3::SQLException:在“at”附近:语法错误
- docker - 允许容器读取主机网络统计信息,但绑定到 docker 网络
- wordpress - 当短代码参数未传递给 shortcode_atts() 时,有没有办法过滤短代码属性?
- python - 如何在 opencv Videocapture 帧中插入较小的图像?
- javascript - 尝试上传图像时,asp.net MVC 大字节大小文件返回 400 Bad Request
- java - org.springframework.dao.InvalidDataAccessResourceUsageException