小编Nar*_*tel的帖子

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

当我们使用 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')
Run Code Online (Sandbox Code Playgroud)

当查询返回大量数据时,此方法的公平性很差。

解决方法 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

Run Code Online (Sandbox Code Playgroud)

有什么好的办法处理这个问题吗?对问题的任何改进表示赞赏。

python memory-efficient python-db-api clickhouse

5
推荐指数
1
解决办法
2350
查看次数