通过Python查询结果缺少列名Prestodb



我对Python还很陌生,我使用prestodb连接到数据库来提取数据并对其进行操作。除了查询结果没有列名之外,一切都很好。

我看到一篇关于在SQL+中启用头的文章,但我找不到任何关于prestodb的内容。我查看了GitHub上的文档,但我要么经验不足,要么没有找到更改genall、fetchall等结果的方法。

有人知道如何在我的查询中引入列名/表头吗?

代码:

conn = prestodb.dbapi.connect(
host='hostname',
port=4443,
user='username',
catalog='meld',
schema='athena',
http_scheme='https',
auth=prestodb.auth.BasicAuthentication("username", "password"),
)
cur = conn.cursor()
cur.execute('SELECT * FROM meld.athena.athena_business_summary limit 10')
query = cur.genall()
rows = pd.DataFrame(query)
print(rows)

查询结果:

您可以从cur.description中获取列名。

通过ebyhr的帮助响应,我找到了另一个线程,它引导我使用Pandas找到了答案。

conn = prestodb.dbapi.connect(
host='hostname',
port=4443,
user='username',
catalog='meld',
schema='athena',
http_scheme='https',
auth=prestodb.auth.BasicAuthentication("username", "password"),
)
cur = conn.cursor()
query = cur.execute(""" SELECT * FROM meld.athena.athena_business_summary limit 10 """)
queryFetch = cur.fetchall()
queryResults = pd.DataFrame.from_records(queryFetch, columns = [i[0] for i in cur.description])
print(queryResults)

我相信有一种更综合的方法可以做到这一点,但我希望这能帮助到一些人!

您还可以使用pandas read_sql_query。

在你的情况下,它将是:

conn = prestodb.dbapi.connect(
host='hostname',
port=4443,
user='username',
catalog='meld',
schema='athena',
http_scheme='https',
auth=prestodb.auth.BasicAuthentication("username", "password"),
)
query = "SELECT * FROM meld.athena.athena_business_summary limit 10"
res = pd.read_sql_query(query, conn)
print(res)

它将为您提供一个带有列名的Dataframe。

这也适用于Trino的trino.dbapi.connect

相关内容

  • 没有找到相关文章

最新更新