clickhouse是yandex公司开发的一款数据库软件,其特点是允许分析及时更新的数据,性能较高。
clickhouse_orm是一个Python库,可以用来操作clickhouse数据库。
0、安装
直接使用pip install infi.clickhouse_orm即可安装clickhouse_orm。
1、快速上手
clickhouse_orm允许定义模型类,类内包含字段、引擎信息,其实例可以存入数据库。
这里使用项目文档上的一个例子:
from infi.clickhouse_orm import Database, Model, StringField, DateField, Float32Field, MergeTree
class Person(Model):
first_name = StringField()
last_name = StringField()
birthday = DateField()
height = Float32Field()
@classmethod
def table_name(cls):
return 'people'
engine = MergeTree('birthday', ('first_name', 'last_name', 'birthday'))
#数据库连接信息
db = Database('my_test_db', db_url='', username='', password='')
#创建表
db.create_table(Person)
Model就是模型的基类,在这段代码上,定义了Person子类,其包含四个字段,first_name,last_name,birthday,height,其数据类型分别是string,string,data,float32,引擎采用MergeTree,表名为people
假设你定义好了两个实例,分别是dan和suzy,那么使用下面的语句可以把这两个实例插入到表内
db.insert([dan, suzy])
这里如果希望数据库只读,可以在Database内加个参数:readonly=True
2、字段默认值、允许空
对于有默认值的字段,可以用如下方式定义
FieldName = StringField(default="default string")
例如
first_name = StringField(default="anonymous")
对于允许空值的字段,可以用如下方式
FieldName = NullableField(FieldType())
例如
birthday = NullableField(DateField())
对于一些有约束条件的字段,可以用使用constraints
birthday_is_in_the_past = Constraint(birthday <= F.today())
这条语句可以保证birthday<=today(),也就做到了保证生日小于当前,确保不是“未来人”
3、计数
使用count可以很方便的计数
db.count(Person)
这样就统计出了Person上的行数。对于有约束条件的,可以这样:
db.count(Person, conditions="height > 1.90")
4、SQL查询
sql = 'SELECT * FROM people'
result = db.select(sql):
使用上面的语句可以执行sql,result为select返回的一个生成器,使用for语句即可访问。