[英]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.