---
source_url: https://docs.dolphindb.cn/zh/funcs/a/append!.html
fetched_at: 2026-05-19T09:13:01Z
category: funcs
title: append!
sha1: 65fa1e4d998adbe03d0b47e6c1dbb85fc156379f
---

# append!

## 语法

`append!(obj, newData)`

别名：`push!`

## 详情

将 *newData* 中的数据追加到 *obj*。在 DolphinDB
中，函数中的感叹号(!)表示直接修改数据本身（就地操作）。

注：

1. 该函数不会检查两表中各列列名与顺序，只要两表中对应位置的列的数据类型一致，即可执行。如果两表中各列顺序有差别，该操作不会自动对齐各列。所以，对数据表进行
   `append!`
   操作时，请检查两表中各列列名与顺序，以免出错。绝大部分情况下两表中各列列名与顺序应当完全一致。
2. 请注意：若数据库为分区，且分区列为字符串类型，则追加的分区列数据不能包含空格， “/t”。

## 参数

**obj** 必须是本地变量：向量、元组、矩阵、表或集合。

**newData** 可以是标量、向量、元组、表或集合。

- 如果 *obj* 是向量，则 *newData* 必须是标量或向量、或元素类型与 *obj* 中元素类型一致的元组。结果是比
  *obj* 更长的向量。
- 如果 *obj* 是元组，则 *newData* 必须是标量、向量或元组。若 *newData* 为向量，则作为整体追加到元组；若
  *newData* 为元组，当配置项 *appendTupleAsAWhole*=true
  时，作为整体追加，*appendTupleAsAWhole*=false 时，将 *newData*
  的每一个元素依次追加。
- 如果 *obj* 是矩阵，则 *newData* 必须是长度为 *obj*
  行数倍数的向量。结果是新的矩阵，行数和 *obj* 相同，具有更多的列数。
- 如果 *obj* 是表，则 *newData* 必须是一个列数和 *obj*
  相同的表。结果是和 *obj* 具有相同列数和列名的表，但行数比 *obj* 多。
- 如果 *newData* 和 *obj*
  的数据类型不同，`append!` 函数会尝试将 *newData* 转换为 *obj*
  的数据类型。如果无法转换，将返回一个错误信息。

## 返回值

数据类型和数据形式与 *obj* 一致。

## 例子

```dolphindb
x = 1 2 3
x.append!(4)
x
// output
[1,2,3,4]
append!(x, 5 6)
x
// output
[1,2,3,4,5,6]
x.append!(7.2)
x
// output
[1,2,3,4,5,6,7]
// 7.2 的数据类型从 DOUBLE 转化为 INT，所以值变为7
x.append!(`XOM)
// output
Incompatible type. Expected: INT, Actual: STRING

x=array(INT, 0, 10)
// x 是一个空的向量
x
// output
[]
x.append!(1)
x
// output
[1]
x=array(SYMBOL, 0, 100)
append!(x, `TEST)
x
// output
["TEST"]

x=1..6$3:2
x
```

| 0 | 1 |
| --- | --- |
| 1 | 4 |
| 2 | 5 |
| 3 | 6 |

```dolphindb
x.append!(7..12)
x
```

| 0 | 1 | 2 | 3 |
| --- | --- | --- | --- |
| 1 | 4 | 7 | 10 |
| 2 | 5 | 8 | 11 |
| 3 | 6 | 9 | 12 |

```dolphindb
x=set(1 2 3 4)
x.append!(6)
// output
x
set(6,1,2,3,4)

t1=table(1 2 3 as x, 4 5 6 as y)
t2=table(1.1 2.2 3.3 as a, 4.4 5.5 6.6 as b)
t1.append!(t2)
t1
```

| x | y |
| --- | --- |
| 1 | 4 |
| 2 | 5 |
| 3 | 6 |
| 1 | 4 |
| 2 | 6 |
| 3 | 7 |

使用 `append!` 把数据添加到分布式表。下面的例子需要在集群中执行。相关配置可参考：[功能配置](../../db_distr_comp/cfg/function_configuration.html)。

```dolphindb
n=1000000
t=table(rand(`IBM`MS`APPL`AMZN,n) as symbol, rand(10.0, n) as value)
db = database("dfs://rangedb_tradedata", RANGE, `A`F`M`S`ZZZZ)
Trades = db.createPartitionedTable(t, "Trades", "symbol")
```

上面的脚本根据表 t 的结构创建了空表 Trades。接着，把表 t 的数据追加到表 Trades 中。

```dolphindb
Trades.append!(t)
select count(*) from Trades;

// output
1000000
```

把其他表的数据追加到表 Trades 中。

```dolphindb
n=500000
t1=table(rand(`FB`GE`MSFT,n) as symbol, rand(100.0, n) as value)
Trades.append!(t1)
select count(*) from Trades

// output
1500000
```

配置项 *appendTupleAsAWhole* 的不同设置值将影响追加元组的行为。

```dolphindb
x = (1,"X")
y = (2,"Y")
x.append!(y)
print(x)
// 配置参数 appendTupleAsAWhole=true 时
(1,"X",(2,"Y"))
// 配置参数 appendTupleAsAWhole=false 时
(1,"X",2,"Y")
```
