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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话