0

The query for clickhouse data from python in json format returned an object. How to get data from this object.

The query is directly working in clickhouse-client

connections and query are given below:

QUERY:

    def getdata(self):
       engine, session = ConnectClickHouse().get_connection()
       result = engine.execute(sqlalchemy.DDL(f"SELECT * FROM rate FORMAT JSON;"))

Gives Response:

<sqlalchemy.engine.result.ResultProxy object at 0x7f8104679df0>

How to extract data from this object? The query is working in clickhouse terminaland gives correct response.


Settings

DEFAULTS = {
"HOST": "127.0.0.1",
"PORT": "8123",
"DATABASE": "clickh",
"USERNAME": "",
"PASSWORD": "",
"PROTOCOL": "http",
"SESSION_URL": "",
"YANDEX_CERT_PATH": "",
"BULK_INSERT_LIMIT": 9999,

}

class ConnectClickHouse:
def create_connection(self):
    config = {
        "username": settings.USERNAME,
        "password": settings.PASSWORD,
        "host": settings.HOST,
        "port": settings.PORT,
        "protocol": settings.PROTOCOL,
        "database": settings.DATABASE
    }
    connection_string = "clickhouse://{username}:{password}@{host}:{port}/{database}?protocol={protocol}".format(
        **config
    )
    engine = create_engine(connection_string, echo=False)
    session = make_session(engine)
    CLICKHOUSE_CLIENT = (engine, session)
    metadata = MetaData(bind=engine)
    return (engine,session)

@classmethod
def get_connection(cls):
    if CLICKHOUSE_CLIENT:
        return CLICKHOUSE_CLIENT
    return cls().create_connection()
  • I would avoid using the official *sqlalchemy-clickhouse* because - see https://stackoverflow.com/a/61722790/303298. Consider using the 'clean' *clickhouse-driver* like here https://stackoverflow.com/a/63248677/303298. – vladimir Feb 18 '22 at 06:40

0 Answers0