Rust中的ORM探索 Diesel库(2):使用Diesel完成CRUD操作
介绍
在上文中,已经将diesel安装配置成功。接下来,我们跟着官网的例子,在项目操作MySQL数据库。
1. 在项目中配置Diesel
首先,我们需要告诉 Diesel 去哪里找到数据库。第一种方式,可以通过配置机器的环境变量DATABASE_URL来实现,但是这样是全局的,当有多个项目时无法灵活使用。因此,我们使用第二种方式,在项目目录中创建.env文件,Diesel运行时优先使用.env文件中的配置信息。如,我们使用本地MySQL数据:
创建配置后,使用Diesel CLI生成配置:
如果本地MySQL中没有test数据库,执行命令后,会创建名为diesel_demo的数据库。

同时生成diesel.toml配置文件和迁移目录,配置文件内容如下:

现在,我们使用Diesel CLI创建一个migration。执行后,Diesel CLI会创建两个空文件。

up.sql存放应用变更,down.sql存放恢复变更。
如up.sql(MySQL)文件:
down.sql(MySQL)文件:
执行migration命令,diesel会根据up.sql文件创建posts表

同时创建src/schema.rs文件,文件内容:
diesel::table! 宏中列出了表中的字段和字段类型。 详细介绍可以看官方文档
2. 编写rust代码
第一步,先建立数据库连接
查询数据库
在src/models.rs文件中创建一个Post结构体,表示数据库中数据格式。
#[derive(Queryable)] 将生成从 SQL 查询加载 Post 结构所需的所有代码。
#[derive(Selectable)] 将生成代码,根据通过 #[diesel(table_name = crate::schema::posts)] 定义的表的模型类型构造匹配的 select 子句。
#[diesel(check_for_backend(diesel::mysql::Mysql))] (可选)将在编译时检查以验证结构中的所有字段类型与其相应的 SQL 端表达式兼容。
下一步,在src/lib.rs中声明models和schema两个模块
最后,我们在src/bin/show_posts.rs 中,编写代码查询数据库中的内容,并展示
运行命令,编译并执行
创建新数据
在src/models.rs文件中创建NewPost结构体,用于插入新记录
下一步,在src/lib.rs中,添加保存新帖子的功能
最后在src/bin/write_post.rs文件中,编写调用的代码
编译并执行write_post

更新数据
执行后,查看数据库中增加了一条记录。但是当我们执行show_posts时,无法查出刚添加的记录。原因是我们在查询数据时,我们增加了过滤器.filter(published.eq(true)),刚插入的数据published为false。接下来我们编写代码修改数据库,将该条记录的published修改为true。
在src/bin/publish_post.rs编写修改数据库的代码
接下来我们用cargo run --bin publish_post 1 来尝试修改第一条记录

查询单条数据
之前的show_posts,可以查询所有published为true的数据记录。下面我们尝试根据id查询单条记录。在src/bin/get_post.rs编写代码
现在我们可以执行命令 cargo run --bin get_post 1

删除数据
截止现在我们已经编写了CRUD的是三个,接下来我们在src/bin/delete_post.rs中编写删除数据。
现在我们来执行命令 cargo run --bin delete_post 1

总结
至此,我们已经将Diesel的CRUD操作都编写完成了,当然这些只是触及了diesel皮毛。后续我们可以参考diesel的学习更多的内容。
本文来自博客园,作者:Spanner,转载请注明原文链接:https://www.cnblogs.com/spanner/p/18670249

浙公网安备 33010602011771号