模型定义
定义模型
模型类
你可以和 Pydantic
一样轻松地定义一个数据库模型,只需继承 cherry.Model
类即可。
以下是一个最简单的模型。
模型字段
可以用 cherry.Field
对模型的字段进行详细设置,就像 pydantic.Field
一样。
cherry.Field
支持 pydantic.Field
的所有配置,并增添了以下配置:
- primary_key - 主键
- autoincrement - 数据库自增
- index - 索引
- unique - 唯一约束
- nullable - 是否允许为空
同时它们还有一些简便写法,通过 Annotated
来实现:
对于数据库自增整型主键,你可以采用以下写法:
数据库绑定
在定义好 Model
之后,你尚未能够使用它。你需要创建一个 cherry.Database
对象,它负责与数据库进行连接交互,你需要传入一个数据库连接字符串,并且必须添加一个支持异步的后端,例如:
sqlite+aiosqlite:///test.db
mysql+asyncmy://root:123456@localhost:3306/test
postgresql+asyncpg://root:123456@localhost:5432/test
然后通过模型的 cherry_config
字段 ,将数据库对象绑定到模型上:
在 cherry_config
中,你还可以定义以下配置:
- database -
cherry.Database
对象,默认无。 - tablename - 模型在数据库中的表名。默认使用模型的类名作为表名,例如本处的
User
。 - abstract - 是否为抽象模型。抽象模型即只用于继承,不作为数据库中的表,默认为
False
。 - constraints - 更多
sqlalchemy
的表约束,类型为List[sqlalchemy.ColumnCollectionConstraint]
。 - indexes - 组合索引,类型为
List[cherry.CompositeIndex]
。 - use_jsonb_in_postgres - 在 postgresql 数据库中 Mapping 等类型使用 jsonb,默认为
True
。 - use_array_in_postgres - 在 postgresql 数据库中 Iterable 等类型使用 array,默认为
True
。
模型初始化
在绑定数据库对象后,你还需要在你的入口文件中调用 Database.init
方法,对模型以及数据库进行初始化才能使用。