save¶
- async AsyncBusinessModel.save(data, allow_detached_data=True, allow_detached_table=False, auto_format=True, check_db=True, check_logical=True, check_field=True, enable_pre_save=True, enable_post_save=True)¶
保存数据
使用业务模型数据保存接口进行数据保存,相较于直接操作数据表, 可以使用业务模型自带的数据和权限校验,并且可以触发保存前后置逻辑(可选)
- 参数
allow_detached_data (
bool
) – 是否允许data中存在无合法关联关系的数据allow_detached_table (
bool
) – 是否允许data中存在无法关联的数据表auto_format (
bool
) – 是否需要处理关联关系、冗余字段等(接口功能)check_db (
bool
) – 是否需要数据库属性校验(接口功能)check_logical (
bool
) – 是否需要逻辑属性校验(接口功能)check_field (
bool
) – 是否需要进行字段权限校验(接口功能)enable_pre_save (
bool
) – 是否开启保存前置逻辑(接口功能)enable_post_save (
bool
) – 是否开启保存后置逻辑(接口功能)
示例
例如有业务模型结构如下:
<ROOT> ├── <A> | └── <A1> └── <B>
4张数据表均包含2个字段
name, parent
, 其中子表的parent
与父表的name
字段关联。如果需要保存
<ROOT>, <A>
表的数据:df_ROOT = pd.DataFrame([ {'name': "R0"}, {'name': "R1"}, ]) df_A = pd.DataFrame([ {'name': "A00", "parent": "R0"}, {'name': "A10", "parent": "R1"}, {'name': "A11", "parent": "R1"}, ]) model = BusinessModel('Tree') model.save({'ROOT': df_ROOT, 'A': df_A})
注解
如果业务模型仅一张数据表,
data
可以是DataFrame
格式, 其余情况,必须是数据表名 -> 保存数据
的字典结构此方法要求保存数据完整,即数据必须由模型主表(根节点)开始,如果需要追加数据, 请使用
attach
参数中的
allow_detached_xxx
,所谓detached
是指数据或数据表没有合理归属以示例中的业务模型结构为例,假如传入的
data
只包含<ROOT>, <A1>
两张表, 由于缺乏A
表延续关联关系,A1
表会被认为是detached table
。 类似地,如果示例中保存的A
表数据中,有一行parent = 'R2'
,由于<ROOT>
中并没有对应数据,这一行数据就会被认为是detached data
- 返回类型
- 返回
保存结果
参见