news 2026/6/10 15:42:09

DuckDB-rs基础操作教程:连接管理、表创建与数据插入实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DuckDB-rs基础操作教程:连接管理、表创建与数据插入实战

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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 15:41:25

从零到一:5分钟极速部署OpenMetadata元数据管理平台

从零到一&#xff1a;5分钟极速部署OpenMetadata元数据管理平台 【免费下载链接】OpenMetadata The Open Context Layer for Data and AI , OpenMetadata is the open platform for building trusted data context and business semantics for humans, AI assistants, and agen…

作者头像 李华
网站建设 2026/6/10 15:40:59

NotchKit:iPhone X刘海屏隐藏终极指南 - 打造卡片式界面的简单方法

NotchKit&#xff1a;iPhone X刘海屏隐藏终极指南 - 打造卡片式界面的简单方法 【免费下载链接】NotchKit A simple way to hide the notch on the iPhone X 项目地址: https://gitcode.com/gh_mirrors/no/NotchKit 想要为你的iOS应用打造独特而优雅的卡片式界面吗&…

作者头像 李华
网站建设 2026/6/10 15:37:29

5步快速掌握LocalAI:开源AI引擎的终极本地部署指南

5步快速掌握LocalAI&#xff1a;开源AI引擎的终极本地部署指南 【免费下载链接】LocalAI LocalAI is the open-source AI engine. Run any model - LLMs, vision, voice, image, video - on any hardware. No GPU required. 项目地址: https://gitcode.com/GitHub_Trending/l…

作者头像 李华
网站建设 2026/6/10 15:36:00

LangChain4j终极指南:如何让AI成为你的SQL数据库翻译官

LangChain4j终极指南&#xff1a;如何让AI成为你的SQL数据库翻译官 【免费下载链接】langchain4j LangChain4j is an idiomatic, open-source Java library for building LLM-powered applications on the JVM. It offers a unified API over popular LLM providers and vector…

作者头像 李华
网站建设 2026/6/10 15:35:10

【YashanDB认证】崖山YCA数据库单机部署实施学习体验

YashanDB的YCA认证学习安装部署YashanDB操作系统调整规划准备安装YashanDB卸载特性问题记录openssl版本不对导致安装失败学习体验YCA官方报名和课程配套PPT下载&#xff1a; https://www.yashandb.com/YCA_courses 个人版数据库、驱动及工具下载体验&#xff1a; https://down…

作者头像 李华
网站建设 2026/6/10 15:35:04

YOLOv改进 | 一种新颖的部分卷积(PConv)轻量高效,适合图像分类、目标检测和分割等各种视觉任务

YOLOv改进 | 一种新颖的部分卷积(PConv)轻量高效,适合图像分类、目标检测和分割等各种视觉任务 一、引言 在计算机视觉领域,卷积神经网络(CNN)是处理图像相关任务(如图像分类、目标检测、图像分割)的核心架构。从经典的LeNet到现代的ResNet、YOLO系列,卷积操作通过局…

作者头像 李华