insert_df¶
- DeepModel.insert_df(object_name, data, relation=None, chunksize=500, enable_upsert=False, update_fields=None, exclusive_fields=None)¶
以事务执行基于DataFrame字段信息的批量插入数据
- 参数
object_name (
str
) – 被插入数据的对象名,需属于当前应用data (
DataFrame
) – 要插入的数据,若有single link property, 则以列名为link_name@link_property_name的形式提供relation (
Optional
[Dict
[str
,DataFrame
]]) – 如有multi link,提供该字典用于补充link target信息, 键为link字段名,值为映射关系的DataFrame DataFrame中的source列需为插入对象的业务主键, target列需为link target的业务主键, 若有link property,则以property名为列名,提供在除source和target的列中chunksize (
int
) – 单次最大行数enable_upsert (
bool
) – 是否组织成upsert句式update_fields (
Optional
[Iterable
[str
]]) – upsert句式下update的update fields列表, 涉及的fields需出现在data或relation中, 默认为提供的data列中除业务主键以外的fieldsexclusive_fields (
Optional
[Iterable
[str
]]) – upsert句式下update的exclusive fields列表, 涉及的fields需出现在data或relation中, 默认为业务主键
提示
由于批量insert实现方式为组织 for-union clause 的 insert 语句, 而在其中查询self link只能查到已有数据, 无法查到 for-union clause 之前循环插入的结果,self link字段的数据将被单独抽出, 在 insert 后再用 for-union clause 的 update 语句更新
示例(不涉及multi link)
import pandas as pd from datetime import datetime dm = DeepModel() data = pd.DataFrame( { 'p_bool': [True, False], 'p_str': ['Hello', 'World'], 'p_local_datetime': [ datetime(2021, 1, 1, 0, 0, 0), datetime(2021, 2, 1, 0, 0, 0), ], } ) # 将data插入Demo对象 dm.insert_df('Demo', data)
示例(涉及multi link)
import pandas as pd dm = DeepModel() # 对象主数据 data = pd.DataFrame( { 'name': ['Alice', 'Bob', 'Carol'] } ) # 主数据的multi link字段target信息 relation = { 'deck': pd.DataFrame( { # 一对多可用多行source与target的关联表示 'source': ['Alice', 'Alice', 'Bob', 'Carol'], 'target': [ 'Dragon', 'Golem', 'Golem', 'Imp' ] } ), 'awards': pd.DataFrame( { 'source': ['Alice', 'Bob', 'Carol'], 'target': ['1st', '2nd', '3rd'], } ) } dm.insert_df('User', data, relation=relation)
- 返回类型