Diesel框架对于数据库的使用和实战,在PostgreSQL的基础上的使用【Diesel】

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
简介: Diesel框架对于数据库的使用和实战,在PostgreSQL的基础上的使用【Diesel】
## Diesel
我们需要告诉Diesel我们在哪里可以找到我们的数据库。我们通过设置环境变量来实现这一点。在我们的开发机器上,我们可能有多个项目,我们不想污染我们的环境。我们可以将url放在文件中。数据库_ URL.env
AI 代码解读

echo DATABASE_URL=postgres://username:password@localhost/diesel_demo > .env

这将创建我们的数据库(如果它还不存在),并创建一个空的迁移目录,我们可以使用它来管理我们的体系结构(稍后将详细介绍)。
现在,我们将编写一个小型CLI来管理博客(忽略了我们只能从该CLI访问数据库的事实……我们首先需要一个表来存储我们的帖子。让我们为此创建一个迁移。
AI 代码解读

Creating migrations/20160815133237_create_posts/up.sql
Creating migrations/20160815133237_create_posts/down.sql

我们还希望创建一个结构,在该结构中我们可以读取数据,并让diesel生成用于引用查询中的表和列的名称。邮递
我们将在以下行的顶部添加以下行:src/lib.rs
AI 代码解读

CREATE TABLE posts (
id SERIAL PRIMARY KEY,
title VARCHAR NOT NULL,
body TEXT NOT NULL,
published BOOLEAN NOT NULL DEFAULT FALSE
)

use diesel::prelude::*;

[derive(Queryable)]

pub struct Post {

pub id: i32,
pub title: String,
pub body: String,
pub published: bool,
AI 代码解读

}

[derival(Queryable)]将生成从SQL查询加载结构所需的所有代码。邮递
通常,模式模块不是手动创建的,而是由柴油发动机生成的。运行时,我们创建一个名为diesel的文件。toml,它告诉Diesel在rs上的src/schema文件中维护一个文件
AI 代码解读

use self::models::*;
use diesel::prelude::*;
use diesel_demo::*;

fn main() {

use self::schema::posts::dsl::*;

let connection = &mut establish_connection();
let results = posts
    .filter(published.eq(true))
    .limit(5)
    .load::<Post>(connection)
    .expect("Error loading posts");

println!("Displaying {} posts", results.len());
for post in results {
    println!("{}", post.title);
    println!("-----------\n");
    println!("{}", post.body);
}
AI 代码解读

}


确切的输出可能因数据库而异,但应该是等效的。
表宏基于数据库模式创建代码堆栈,以表示所有表和列。我们将在下一个示例中详细了解如何使用它。
每当我们运行或恢复迁移时,此文件都会自动更新。
现场订单说明
使用结构上字段的假定顺序来匹配表中的列,因此确保按照文件#[derival(Queryable)]Postpostsschema.rs中的顺序定义它们
让我们编写代码来实际展示我们的帖子。
AI 代码解读

use crate::schema::posts;

[derive(Insertable)]

[diesel(table_name = posts)]

pub struct NewPost<'a> {

pub title: &'a str,
pub body: &'a str,
AI 代码解读

}


use行导入了一堆别名,因此我们可以说不是,但不是。当我们只处理一个表时,这很有用,但这并不总是我们想要的。self::schema::posts::dsl::*postposts::tablepublishedposts::published
我们可以使用它不幸的是,结果不会很有趣,因为我们在数据库中实际上没有任何帖子。然而,我们已经编写了大量代码,所以让我们提交。货仓展示柱
演示的完整代码可以在这里找到。
接下来,让我们编写一些代码来创建一篇新文章。我们需要一个插入新记录的结构。
AI 代码解读

use self::models::{NewPost, Post};

pub fn create_post(conn: &mut PgConnection, title: &str, body: &str) -> Post {

use crate::schema::posts;

let new_post = NewPost { title, body };

diesel::insert_into(posts::table)
    .values(&new_post)
    .get_result(conn)
    .expect("Error saving new post")
AI 代码解读

}

当我们调用insertupdate语句时,它会自动添加到查询的末尾,并允许我们将其加载到为正确类型实现的任何结构中。整洁获取_结果返回*可查询
Diesel可以在单个查询中插入多个记录。只需将或切片传递给,然后调用而不是。如果您实际上不想对刚刚插入的行执行任何操作,请调用。编译器不会像这样抱怨你。:)Vecinsertget_resultsget_result.execute
现在,我们已经设置好了一切,我们可以创建一个小脚本来编写一篇新文章。
AI 代码解读

use self::models::Post;
use diesel::prelude::*;
use diesel_demo::*;
use std::env::args;

fn main() {

use self::schema::posts::dsl::{posts, published};

let id = args()
    .nth(1)
    .expect("publish_post requires a post id")
    .parse::<i32>()
    .expect("Invalid ID");
let connection = &mut establish_connection();

let post = diesel::update(posts.find(id))
    .set(published.eq(true))
    .get_result::<Post>(connection)
    .unwrap();
println!("Published post {}", post.title);
AI 代码解读

}

然而,我们仍然只涵盖CRUD四个字母中的三个。让我们向您展示如何删除内容。有时我们写一些我们非常讨厌的东西,以至于我们没有时间查找ID。所以,让我们从标题中删除一些单词,甚至只是删除标题中的一些单词。
AI 代码解读

Compiling diesel_demo v0.1.0 (file:///Users/sean/Documents/Projects/open-source/diesel_demo)

 Running `target/debug/delete_post demo`
AI 代码解读

Deleted 1 posts


当我们再次尝试运行它时,我们可以看到该帖子实际上已被删除。这很难触及柴油机的表面,但我希望本教程为您提供了一个良好的基础。我们建议您浏览API文档以获取更多信息。您可以在这里找到本教程的最终代码。货仓展示柱
AI 代码解读
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
打赏
0
0
0
0
112
分享
相关文章
在C++的QT框架中实现SQLite数据库的连接与操作
以上就是在C++的QT框架中实现SQLite数据库的连接与操作的基本步骤。这些步骤包括创建数据库连接、执行SQL命令、处理查询结果和关闭数据库连接。在实际使用中,你可能需要根据具体的需求来修改这些代码。
119 14
【赵渝强老师】创建PostgreSQL的数据库
本文介绍了在PostgreSQL中通过SQL命令“create database”创建数据库的方法。首先查询系统目录pg_database以查看现有数据库集合,然后使用“create database”命令创建新数据库,并了解其在$PDATA/base目录下对应的文件夹生成。最后重新查询数据库集合确认创建结果,附带视频讲解便于理解操作步骤及注意事项。
【赵渝强老师】PostgreSQL的数据库
PostgreSQL的逻辑存储结构涵盖数据库集群、数据库、表、索引、视图等对象,每个对象有唯一的oid标识。数据库集群包含多个数据库,每个数据库又包含多个模式,模式内含表、函数等。通过特定SQL命令可查看和管理这些数据库对象。
百万指标,秒级查询,零宕机——时序数据库 TDengine 在 AIOps 中的硬核实战
本篇文章详细讲述了七云团队在运维平台中如何利用 TDengine 解决海量时序数据存储与查询的实际业务需求。内容涵盖了从数据库选型、方案落地到业务挑战及解决办法的完整过程,特别是分享了升级 TDengine 3.x 时的实战经验,给到有需要的小伙伴参考阅读。
65 1
【赵渝强老师】PostgreSQL的模板数据库
在PostgreSQL中,创建新数据库时,默认通过拷贝`template1`实现。`template1`包含标准系统对象,可自定义以影响新数据库内容;而`template0`是纯净模板,仅含预定义对象且不应修改。视频讲解和代码示例展示了如何查看现有数据库信息及标识字段的作用。 ![图示](https://ucc.alicdn.com/pic/developer-ecology/yub6x2mlkqwck_398ed06397a44c2d9bfbb5ae5c90bbc0.png) [视频链接](https://www.bilibili.com/video/BV1szyfY4EQn)
【赵渝强老师】PostgreSQL的模板数据库
|
3月前
|
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
264 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
云数据库实战:基于阿里云RDS的Python应用开发与优化
在互联网时代,数据驱动的应用已成为企业竞争力的核心。阿里云RDS为开发者提供稳定高效的数据库托管服务,支持多种数据库引擎,具备自动化管理、高可用性和弹性扩展等优势。本文通过Python应用案例,从零开始搭建基于阿里云RDS的数据库应用,详细演示连接、CRUD操作及性能优化与安全管理实践,帮助读者快速上手并提升应用性能。
71.7万/秒到1.4万/秒!数据库查询优化实战
在现代计算机系统中,程序的局部性原理是优化性能的关键。通过利用时间局部性和空间局部性,可以显著提升数据访问效率,减少高开销的操作如内存访问和网络 I/O。本文将探讨如何利用空间局部性原理,在实际案例中减少数据库查询量,并通过详细的监控和优化措施确保系统的稳定性和高效性。
71.7万/秒到1.4万/秒!数据库查询优化实战
华为数据库openGauss与PostgreSQL使用对比
华为openGauss数据库基于PostgreSQL内核演进,进行了多项增强。密码认证从MD5升级为SHA256;字符串存储中,char(n)、varchar(n)的n由字符改为字节,新增nvarchar2(n)表示字符,最大存储100MB;且将空字符&#39;&#39;统一转换为null,提升了数据处理的一致性和安全性。
267 12

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等