Python使用infi.clickhouse_orm操作clickhouse数据库

发布于 / Python / Comments Off on Python使用infi.clickhouse_orm操作clickhouse数据库

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语句即可访问。

转载原创文章请注明,转载自: 斐斐のBlog » Python使用infi.clickhouse_orm操作clickhouse数据库
评论已关闭