pub struct Appender<'conn> { /* private fields */ }Expand description
Appender for fast import data
§Thread Safety
Appender is neither Send nor Sync:
- Not
Sendbecause it holds a reference toConnection, which is!Sync - Not
Syncbecause DuckDB appenders don’t support concurrent access
To use an appender in another thread, move the Connection to that thread
and create the appender there.
If you need to share an Appender across threads, wrap it in a Mutex.
See DuckDB concurrency documentation for more details.
§Wide Tables (Many Columns)
Array literals [value; N] are supported for tables with up to 32 columns.
appender.append_row([0; 32])?;
appender.append_row([1, 2, 3, 4, 5])?;For tables with more than 32 columns, use one of these alternatives:
§1. Slice approach - convert values to &dyn ToSql
let values: Vec<i32> = vec![0; 100];
let params: Vec<&dyn ToSql> = values.iter().map(|v| v as &dyn ToSql).collect();
appender.append_row(params.as_slice())?;§2. params! macro - write values explicitly
appender.append_row(params![v1, v2, v3, ..., v50])?;§3. appender_params_from_iter - pass an iterator directly
use duckdb::appender_params_from_iter;
let values: Vec<i32> = vec![0; 100];
appender.append_row(appender_params_from_iter(values))?;All three methods can be used interchangeably and mixed in the same appender.
Implementations§
Source§impl Appender<'_>
impl Appender<'_>
Sourcepub fn append_rows<P, I>(&mut self, rows: I) -> Result<()>where
I: IntoIterator<Item = P>,
P: AppenderParams,
pub fn append_rows<P, I>(&mut self, rows: I) -> Result<()>where
I: IntoIterator<Item = P>,
P: AppenderParams,
Sourcepub fn append_row<P: AppenderParams>(&mut self, params: P) -> Result<()>
pub fn append_row<P: AppenderParams>(&mut self, params: P) -> Result<()>
Sourcepub fn add_column(&mut self, name: &str) -> Result<()>
pub fn add_column(&mut self, name: &str) -> Result<()>
Add a column to the appender’s active column list.
When columns are added, only those columns need values during append. Other columns will use their DEFAULT value (or NULL if no default).
This flushes any pending data before modifying the column list.
Sourcepub fn clear_columns(&mut self) -> Result<()>
pub fn clear_columns(&mut self) -> Result<()>
Clear the appender’s active column list.
After clearing, all columns become active again and values must be provided for every column during append.
This flushes any pending data before clearing.