如何使用clickhouse-driver(python)从Clickhouse中获取字典/命名元组数据?

5
当我们使用DB API 2.0执行cur.execute("select * from db.table")获取数据时,我们得到一个光标对象,它看起来像是元组列表的生成器对象。
然而,在pymongo中,当我们获取数据时,我们会得到一个字典列表。我想要实现这样的效果。
我希望得到的不是元组列表,而是字典列表或命名元组。
从效率的角度来看,我认为这是有意义的,因为模式已经定义好了,所以不需要为每个记录发送模式。
目前我正在使用以下解决方法:
cur.execute("select * from db.table")
columns = cur.columns_with_types
data = cur.fetchall()
df = pd.DataFrame(data,columns=[tuple[0] for tuple in columns])
data_reqd = df.to_dict('records')

当查询返回大量数据时,此方法表现不佳。

解决方法1:使用fetchmany(size=block_size),但这似乎不是一种优雅的处理方式。

解决方法2:这似乎是更好的处理方式。

cur.execute("select * from db.table")
columns = cur.columns_with_types
for tup in cur:
     row = dict(zip(columns, tup))
    # use row

有什么好的处理方法吗?欢迎对问题提出任何改进意见。


我认为这是一个很好的解决方案。就我所知,没有任何变通方法。 - Borko Rastović
1个回答

0
你可以选择创建一个Client并调用它的query_dataframe方法
import clickhouse_driver as ch

ch_client = ch.Client(host='localhost')
df = ch_client.query_dataframe('select * from db.table')
records = df.to_dict('records')

我认为这是在这里打算使用的标准方法。将其标记为接受的答案。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接