Rust数据库入门:PostgreSQL与MongoDB

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么Rust和数据库是完美搭档

Rust是一种现代系统编程语言,凭借其高性能、内存安全性和零成本抽象,正日益受到欢迎。许多来自Python、JavaScript或Go世界的开发者都会问:如何在Rust中操作数据库?答案很简单:Rust为关系型数据库(PostgreSQL)和文档型数据库(MongoDB)都提供了强大且安全的驱动程序。

在本文中,我们将介绍在Rust中使用PostgreSQL和MongoDB的基础知识。您将学习如何配置项目、连接数据库以及执行基本的CRUD操作。本文面向初学者,因此我们将使用简单易懂的示例。



1. 项目配置与依赖安装

开始之前,请确保您已安装Rust和Cargo。创建一个新项目:

cargo new rust_db_examplecd rust_db_example


打开Cargo.toml文件并添加必要的依赖。对于PostgreSQL,我们将使用tokio-postgres crate(异步驱动程序)和serde进行数据序列化。对于MongoDB,则使用官方驱动程序mongodb。

[dependencies]tokio = { version = "1", features = ["full"] }tokio-postgres = "0.7"serde = { version = "1", features = ["derive"] }serde_json = "1"mongodb = "2.8"


请注意:我们使用tokio作为异步运行时,因为这两个驱动程序都是异步工作的。这是现代Rust应用程序的标准做法。



2. 在Rust中使用PostgreSQL

PostgreSQL是一个强大的关系型数据库。在Rust中,我们将使用tokio-postgres crate来操作它。它提供了用于执行SQL查询的异步接口。



2.1 连接数据库

创建一个函数来连接本地PostgreSQL数据库。请确保您的PostgreSQL服务器正在运行,并且已创建数据库(例如test_db):

use tokio_postgres::{NoTls, Error};

#[tokio::main]async fn main() -> Result<(), Error> { // 连接字符串:postgresql://user:password@localhost/dbname let (client, connection) = tokio_postgres::connect( "host=localhost user=postgres dbname=test_db", NoTls, ).await?;

// 在后台运行连接 tokio::spawn(async move { if let Err(e) = connection.await { eprintln!("Connection error: {}", e); } });

println!("已成功连接到PostgreSQL!"); Ok(())}


2.2 创建表并插入数据

现在创建一个users表并插入几条记录:

// 创建表client    .execute(        "CREATE TABLE IF NOT EXISTS users (            id SERIAL PRIMARY KEY,            name VARCHAR(100) NOT NULL,            email VARCHAR(150) UNIQUE NOT NULL        )",        &[],    )    .await?;

// 插入数据let name = "Alice";let email = "alice@example.com";client .execute( "INSERT INTO users (name, email) VALUES ($1, $2)", &[&name, &email], ) .await?;

println!("用户 {} 已添加!", name);


2.3 读取和更新数据

执行SELECT查询并更新记录:

// 读取数据let rows = client    .query("SELECT id, name, email FROM users", &[])    .await?;

for row in rows { let id: i32 = row.get(0); let name: &str = row.get(1); let email: &str = row.get(2); println!("ID: {}, Name: {}, Email: {}", id, name, email);}

// 更新记录client .execute( "UPDATE users SET email = $1 WHERE name = $2", &[&"alice_new

博客

书籍推荐