簡體   English   中英

如何使用clickhouse-driver(python)從字典/名稱元組中的Clickhouse獲取數據?

[英]How to fetch data from Clickhouse in dicitionary/name-tuple using clickhouse-driver (python)?

當我們使用 DB API 2.0 cur.execute("select * from db.table")獲取數據時,我們會得到一個 cursor,它看起來像是列表的生成器 ZA8CFDE6331BD59EB2AC96F8911C4B66tZ6。

而在 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

有什么好的方法來處理這個嗎? 感謝您對問題的任何改進。

您也可以創建一個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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM