update_from_dataframe

DataTableDaMeng.update_from_dataframe(source, chucksize=None)

使用 DataFrame 更新数据表

参数
  • source (DataFrame) – 更新数据源

  • chucksize (Optional[int]) – 每批更新最大使用的DataFrame行数

重要

DataFrame source 必须包含 where 列, 其列类型可以为字符串,也可以是pypika的条件语句。 该列指明每行数据对应的更新条件。为了防止条件缺失而进行了全表更新, 该列所有数据不允许为空。

如果有部分行不想进行所有字段的更新,可在对应单元格内填充Skip值。

示例

from deepfos.element.datatable import Skip

df = pd.DataFrame(data=[
    [1, 'Foo', 'Foo@x.com'],
    [2, 'Bar', 'bar@x.com'],
    [3, 'Jack', Skip]
], columns=['id', 'name', 'email'])

df['where'] = pd.Series(f"id='{i + 1}'" for i in range(3))

tbl = DataTableMySQL("example")
tbl.update_from_dataframe(df)

将执行以下SQL:

UPDATE `example`
SET `id`=1,`name`='Foo',`email`='Foo@x.com'
WHERE
    id = 1;
UPDATE `example`
SET `id`=2,`name`='Bar',`email`='bar@x.com'
WHERE
    id = 2;
UPDATE `example`
    SET `id`=3,`name`='Jack'  -- email字段值为Skip,因此不更新
WHERE
    id = 3;