DuckDB-rs基础操作教程:连接管理、表创建与数据插入实战
【免费下载链接】duckdb-rsErgonomic bindings to duckdb for Rust项目地址: https://gitcode.com/gh_mirrors/du/duckdb-rs
DuckDB-rs是Rust语言下的DuckDB数据库绑定库,提供了直观易用的API来操作DuckDB数据库。本教程将带你快速掌握DuckDB-rs的核心基础操作,包括数据库连接管理、表创建和数据插入的实战技巧。
一、快速上手:DuckDB-rs环境准备
要开始使用DuckDB-rs,首先需要在你的Rust项目中添加依赖。在Cargo.toml文件中加入以下内容:
[dependencies] duckdb = "0.10.0"如果你需要从源码构建,可以克隆官方仓库:
git clone https://gitcode.com/gh_mirrors/du/duckdb-rs二、数据库连接管理:开启你的DuckDB之旅
2.1 创建内存数据库连接
DuckDB支持内存数据库模式,非常适合开发和测试环境。使用duckdb::Connection结构体可以轻松创建连接:
use duckdb::Connection; fn main() -> Result<(), Box<dyn std::error::Error>> { // 创建内存数据库连接 let conn = Connection::open_in_memory()?; println!("成功创建内存数据库连接"); Ok(()) }2.2 创建持久化数据库连接
对于生产环境,你可能需要持久化存储数据。只需提供文件路径即可创建持久化数据库:
// 创建持久化数据库连接 let conn = Connection::open("mydatabase.db")?; println!("成功创建持久化数据库连接");2.3 连接池管理
对于高并发应用,使用连接池可以有效管理数据库连接。DuckDB-rs提供了与r2d2连接池的集成:
use duckdb::r2d2::DuckdbConnectionManager; use r2d2::Pool; let manager = DuckdbConnectionManager::file("mydatabase.db")?; let pool = Pool::builder().max_size(10).build(manager)?; // 从连接池获取连接 let conn = pool.get()?;三、表创建:设计你的数据结构
3.1 基本表创建
使用execute_batch方法可以执行SQL语句创建表。以下是一个简单的示例:
// 创建表 conn.execute_batch("CREATE TABLE test (id INTEGER, name TEXT)")?;3.2 创建带约束的表
你可以为表添加各种约束,如主键、非空约束等:
// 创建带约束的表 conn.execute_batch( "CREATE TABLE users ( id INTEGER PRIMARY KEY NOT NULL, name TEXT NOT NULL, email TEXT UNIQUE )" )?;3.3 创建带默认值的表
DuckDB支持为列设置默认值,如自动生成的时间戳:
// 创建带默认值的表 conn.execute_batch( "CREATE TABLE posts ( id INTEGER PRIMARY KEY, title TEXT, content TEXT, created_at TIMESTAMP DEFAULT current_timestamp )" )?;四、数据插入:向表中添加数据
4.1 使用execute方法插入数据
execute方法适合执行简单的插入操作:
// 插入单条数据 conn.execute( "INSERT INTO test (id, name) VALUES (?, ?)", params![1, "Alice"] )?;4.2 批量插入数据
使用execute_batch可以高效地插入多条数据:
// 批量插入数据 conn.execute_batch( "INSERT INTO test VALUES (2, 'Bob'), (3, 'Charlie'), (4, 'David')" )?;4.3 使用参数化查询插入数据
参数化查询可以防止SQL注入,并提高代码的可读性和安全性:
// 准备参数化查询 let mut stmt = conn.prepare("INSERT INTO test (id, name) VALUES (?, ?)")?; // 执行参数化插入 stmt.execute([5, "Eve"])?; stmt.execute([6, "Frank"])?;五、综合示例:连接、创建表与插入数据
下面是一个完整的示例,演示了如何连接数据库、创建表并插入数据:
use duckdb::{params, Connection}; fn main() -> Result<(), Box<dyn std::error::Error>> { // 创建内存数据库连接 let conn = Connection::open_in_memory()?; println!("成功连接到DuckDB数据库"); // 创建表 conn.execute_batch( "CREATE TABLE employees ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, department TEXT, salary DECIMAL(10, 2) )" )?; println!("成功创建employees表"); // 插入数据 conn.execute_batch( "INSERT INTO employees VALUES (1, 'John Doe', 'Engineering', 75000.00), (2, 'Jane Smith', 'Marketing', 65000.00), (3, 'Bob Johnson', 'Sales', 60000.00)" )?; println!("成功插入初始数据"); // 参数化插入 let mut stmt = conn.prepare( "INSERT INTO employees (id, name, department, salary) VALUES (?, ?, ?, ?)" )?; stmt.execute(params![4, "Alice Williams", "HR", 55000.00])?; stmt.execute(params![5, "Charlie Brown", "Engineering", 80000.00])?; println!("成功使用参数化查询插入数据"); Ok(()) }六、总结与下一步
通过本教程,你已经掌握了DuckDB-rs的基础操作,包括:
- 创建和管理数据库连接
- 设计和创建数据表
- 使用多种方式插入数据
这些基础操作是使用DuckDB-rs进行数据处理的基石。接下来,你可以学习如何执行查询、处理结果集以及使用更高级的特性如事务和索引。
DuckDB-rs的源码位于项目的crates/duckdb/src/目录下,你可以通过阅读源码来深入了解其实现细节和更多高级功能。
【免费下载链接】duckdb-rsErgonomic bindings to duckdb for Rust项目地址: https://gitcode.com/gh_mirrors/du/duckdb-rs
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考