A Python library for working with the ClickHouse database (https://clickhouse.yandex/)
Go to file
M1ha 0391482ec7 Fixed 2 bugs in Merge engine:
1) If database name contained some signes (+, -) create merge table failed.
2) When merge table was created and set_database was not previously called, "currentDatabase()" was also used, which could lead to errors on multiple databases.
2017-09-18 15:53:15 +05:00
docs Added Merge engine 2017-09-07 17:44:27 +05:00
scripts - Added QuerySet.paginate() 2017-08-14 12:14:52 +03:00
src/infi Fixed 2 bugs in Merge engine: 2017-09-18 15:53:15 +05:00
tests Added Merge engine 2017-09-07 17:44:27 +05:00
.gitignore refactor documentation 2017-04-26 15:47:02 +03:00
buildout.cfg Update version of isolated python 2017-08-16 13:07:39 +03:00
CHANGELOG.md Releasing v0.9.6 2017-08-23 08:15:03 +03:00
LICENSE HOSTDEV-2736 change license and add license file 2017-06-18 12:35:33 +03:00
README.md Update example in README 2017-08-14 12:17:38 +03:00
setup.in HOSTDEV-2736 change license and add license file 2017-06-18 12:35:33 +03:00

Introduction

This project is simple ORM for working with the ClickHouse database. It allows you to define model classes whose instances can be written to the database and read from it.

Let's jump right in with a simple example of monitoring CPU usage. First we need to define the model class, connect to the database and create a table for the model:

from infi.clickhouse_orm.database import Database
from infi.clickhouse_orm.models import Model
from infi.clickhouse_orm.fields import *
from infi.clickhouse_orm.engines import Memory

class CPUStats(Model):

    timestamp = DateTimeField()
    cpu_id = UInt16Field()
    cpu_percent = Float32Field()

    engine = Memory()

db = Database('demo')
db.create_table(CPUStats)

Now we can collect usage statistics per CPU, and write them to the database:

import psutil, time, datetime

psutil.cpu_percent(percpu=True) # first sample should be discarded
while True:
    time.sleep(1)
    stats = psutil.cpu_percent(percpu=True)
    timestamp = datetime.datetime.now()
    db.insert([
        CPUStats(timestamp=timestamp, cpu_id=cpu_id, cpu_percent=cpu_percent)
        for cpu_id, cpu_percent in enumerate(stats)
    ])

Querying the table is easy, using either the query builder or raw SQL:

# Calculate what percentage of the time CPU 1 was over 95% busy
total = CPUStats.objects_in(db).filter(cpu_id=1).count()
busy = CPUStats.objects_in(db).filter(cpu_id=1, cpu_percent__gt=95).count()
print 'CPU 1 was busy {:.2f}% of the time'.format(busy * 100.0 / total)

# Calculate the average usage per CPU
for row in CPUStats.objects_in(db).aggregate('cpu_id', average='avg(cpu_percent)'):
    print 'CPU {row.cpu_id}: {row.average:.2f}%'.format(row=row)

To learn more please visit the documentation.