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

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

我对 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)

Query Results:

python pycharm presto
3个回答
1
投票

您可以从

cur.description
获取列名称。


0
投票

通过 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)

我确信有一种更统一的方法可以做到这一点,但我希望这对某人有帮助!


0
投票

我找到了另一种干净的方法!

您还可以使用 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)

它会给你一个带有列名称的数据框。

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