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