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)

保存数据

使用业务模型数据保存接口进行数据保存,相较于直接操作数据表, 可以使用业务模型自带的数据和权限校验,并且可以触发保存前后置逻辑(可选)

参数
  • data (Union[DataFrame, Dict[str, DataFrame]]) – 保存数据

  • 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

返回类型

List[ModelDataReturnDTO]

返回

保存结果

参见

attach