我对 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)
它会给你一个带有列名称的数据框。