我司为了数据安全,连接数据库时不再使用明文密码,对外只提供http rest api接口,因此原先那种clickhouse_driver的形式不能再使用,需要请求url的方式来获取数据,研究了下
https://clickhouse.com/docs/en/interfaces/http/#cli-queries-with-parameters
最终成功获取数据,并返回了df,代码如下
import pandas as pd
import requests
def connclickhouse_get_df(sql):
headers = {"Content-Type": "json/html; charset=UTF-8"}
url = 'http://host:port/?database=database&user=user&password='.fromat(host,port,database,user)
result = requests.post(url,headers = headers,data = sql )
r = result.json()
df = pd.DataFrame(r['data'])
return df
sql = """
select 1
FORMAT JSON
"""
## 注意上面的sql 后面增加了 FORMAT JSON ,是为了返回json格式的结果,然后转为df
df = connclickhouse_get_df(sql)
image
遇到sql里面有中文,需要将整个sql编码一下,否则会报错
df = connclickhouse_get_df(sql.encode("utf-8"))