mirror of
https://github.com/Infinidat/infi.clickhouse_orm.git
synced 2025-08-01 10:49:53 +03:00
build 0.2.0
This commit is contained in:
parent
1a366ce625
commit
6286185a45
63
README.md
63
README.md
|
@ -4,70 +4,19 @@ This repository expects to use more type hints, and will drop support for Python
|
|||
|
||||
Supports both synchronous and asynchronous ways to interact with the clickhouse server. Means you can use asyncio to perform asynchronous queries, although the asynchronous mode is not well tested.
|
||||
|
||||
| Build | [](https://github.com/sswest/ch-orm/actions?query=workflow:ci)[](https://coveralls.io/github/sswest/ch-orm?branch=develop) |
|
||||
| ------- | ------------------------------------------------------------ |
|
||||
| Package | [](https://pypi.python.org/pypi/ch-orm)[](https://pypi.python.org/pypi/ch-orm)[](https://pypi.python.org/pypi/ch-orm) |
|
||||
|
||||
| Build | [](https://github.com/sswest/ch-orm/actions?query=Python+3.7+Tests)[](https://github.com/sswest/ch-orm/actions?query=Python+3.8+Tests)[](https://github.com/sswest/ch-orm/actions?query=Python+3.9+Tests)[](https://github.com/sswest/ch-orm/actions?query=Python+3.10+Tests) |
|
||||
| ----------- | ------------------------------------------------------------ |
|
||||
| **Package** | [](https://pypi.python.org/pypi/ch-orm)[](https://pypi.python.org/pypi/ch-orm)[](https://pypi.python.org/pypi/ch-orm)[](https://coveralls.io/github/sswest/ch-orm?branch=master) |
|
||||
| **Docs** | [](http://sswest.github.io/ch-orm) |
|
||||
|
||||
Introduction
|
||||
============
|
||||
|
||||
This project is simple ORM for working with the [ClickHouse database](https://clickhouse.yandex/).
|
||||
|
||||
It allows you to define model classes whose instances can be written to the database and read from it.
|
||||
|
||||
First you have to install like this:
|
||||
|
||||
```
|
||||
pip install ch-orm
|
||||
```
|
||||
|
||||
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:
|
||||
|
||||
```python
|
||||
from clickhouse_orm import Database, Model, DateTimeField, UInt16Field, Float32Field, Memory, F
|
||||
|
||||
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:
|
||||
|
||||
```python
|
||||
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:
|
||||
|
||||
```python
|
||||
# Calculate what percentage of the time CPU 1 was over 95% busy
|
||||
queryset = CPUStats.objects_in(db)
|
||||
total = queryset.filter(CPUStats.cpu_id == 1).count()
|
||||
busy = queryset.filter(CPUStats.cpu_id == 1, CPUStats.cpu_percent > 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 queryset.aggregate(CPUStats.cpu_id, average=F.avg(CPUStats.cpu_percent)):
|
||||
print('CPU {row.cpu_id}: {row.average:.2f}%'.format(row=row))
|
||||
```
|
||||
|
||||
This and other examples can be found in the `examples` folder.
|
||||
|
||||
To learn more please visit the [documentation](docs/toc.md).
|
||||
|
|
|
@ -24,7 +24,7 @@ dependencies = [
|
|||
"iso8601 >= 0.1.12",
|
||||
"setuptools"
|
||||
]
|
||||
version = "0.1.1"
|
||||
version = "0.2.0"
|
||||
|
||||
[tool.setuptools.packages.find]
|
||||
where = ["src"]
|
||||
|
|
Loading…
Reference in New Issue
Block a user