Rust与PostgreSQL:轻松编写高性能查询

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

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

开始课程

Rust与PostgreSQL:让你的代码更快的组合

\n\n

你是否曾想过,为什么越来越多的后端开发者转向Rust?答案很简单:Rust让你掌控内存和速度,而PostgreSQL让你掌控数据。两者结合,能够承受每秒数十万次请求的负载,而不会出现"卡顿"和内存泄漏。

\n\n

在本指南中,我们将探讨如何让Rust与PostgreSQL协同工作。你将学习如何配置连接、执行查询、避免SQL注入以及构建异步应用程序。让我们开始吧!

\n\n

为什么选择Rust和PostgreSQL?

\n\n

Rust不仅仅是一种时髦的语言。它的所有权系统和借用检查器确保你不会遇到空指针或悬垂引用。而PostgreSQL也不仅仅是一个数据库。它是一个强大的工具,支持JSON、全文搜索和复杂事务。

\n\n

当你将Rust和PostgreSQL结合使用时,你将获得:

\n
    \n
  • 安全性 — Rust不会让你意外发送不正确的SQL。
  • \n
  • 性能 — 异步驱动程序的运行速度与C语言相当。
  • \n
  • 控制力 — 你自行决定何时以及如何拉取数据。
  • \n
\n\n

安装与环境配置

\n\n

在编写代码之前,请确保你已经安装了以下内容:

\n
    \n
  • Rust(最新的稳定版本) — rustup update
  • \n
  • PostgreSQL(本地或通过Docker) — docker run --name pg -e POSTGRES_PASSWORD=pass -p 5432:5432 -d postgres
  • \n
  • libpq-dev库(适用于Linux)或Mac/Windows上的类似库
  • \n
\n\n

创建一个新项目:

\n\n
cargo new rust-postgres-guide\ncd rust-postgres-guide
\n\n

选择驱动程序:tokio-postgres vs sqlx

\n\n

在Rust中,有两种主要方式与PostgreSQL交互:

\n
    \n
  • tokio-postgres — 底层异步驱动程序。提供完全控制。
  • \n
  • sqlx — 高层异步驱动程序,可在编译时检查查询。
  • \n
\n\n

对于高级项目,我推荐使用sqlx——它更方便、更安全。但如果你需要最大程度的控制,请使用tokio-postgres。

\n\n

将依赖项添加到Cargo.toml:

\n\n
[dependencies]\ntokio = { version = "1", features = ["full"] }\nsqlx = { version = "0.7", features = ["runtime-tokio-rustls", "postgres"] }\nserde = { version = "1", features = ["derive"] }\n
\n\n

首次连接:Rust与PostgreSQL相遇

\n\n

编写一个简单的示例,连接到数据库并返回PostgreSQL版本。

\n\n
use sqlx::postgres::PgPoolOptions;\nuse std::error::Error;\n\n#[tokio::main]\nasync fn main() -> Result<(), Box<dyn Error>> {\n    // 连接字符串:postgres://user:password@host:port/db\n    let database_url = "postgres://postgres:pass@localhost:5432/postgres";\n    \n    // 创建连接池(可重用连接)\n    let pool = PgPoolOptions::new()\n        .max_connections(5)\n        .connect(database_url)\n        .await?;\n\n    // 执行查询\n    let row: (String,) = sqlx::query_as("SELECT version()")\n        .fetch_one(&pool)\n        .await?;\n\n    println!("PostgreSQL version: {}", row.0);\n    Ok(())\n}
\n\n

运行代码:cargo run。如果一切配置正确,你将看到PostgreSQL版本。请注意PgPoolOptions——连接池在生产环境中是必需的。它重用连接,而不是为每个请求重新创建连接。

\n\n

创建表与CRUD操作

\n\n

现在,让我们创建一个users表并执行基本操作:插入、读取、更新、删除。

\n\n

迁移:创建表

\n\n

在sqlx中,迁移是单独的SQL文件。创建一个migrations文件夹和一个文件

博客

书籍推荐