SeaORM

Rust 异步动态 ORM
授权协议 Apache
开发语言 Rust
所属分类 程序开发、 ORM/持久层框架
软件类型 开源软件
地区 不详
投 递 者 耿俊彦
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

SeaORM 是 Rust 编写的异步动态 ORM,可用于在 Rust 中构建轻量级和并发的 Web 服务。

  • 异步:依赖 SQLx
  • 动态:基于 SeaQuery
  • 可测试
  • 面向服务

示例代码

Entity

use sea_orm::entity::prelude::*;

#[derive(Clone, Debug, PartialEq, DeriveEntityModel)]
#[sea_orm(table_name = "cake")]
pub struct Model {
    #[sea_orm(primary_key)]
    pub id: i32,
    pub name: String,
}

#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
pub enum Relation {
    #[sea_orm(has_many = "super::fruit::Entity")]
    Fruit,
}

impl Related<super::fruit::Entity> for Entity {
    fn to() -> RelationDef {
        Relation::Fruit.def()
    }
}

Select

// find all models
let cakes: Vec<cake::Model> = Cake::find().all(db).await?;

// find and filter
let chocolate: Vec<cake::Model> = Cake::find()
    .filter(cake::Column::Name.contains("chocolate"))
    .all(db)
    .await?;

// find one model
let cheese: Option<cake::Model> = Cake::find_by_id(1).one(db).await?;
let cheese: cake::Model = cheese.unwrap();

// find related models (lazy)
let fruits: Vec<fruit::Model> = cheese.find_related(Fruit).all(db).await?;

// find related models (eager)
let cake_with_fruits: Vec<(cake::Model, Vec<fruit::Model>)> =
    Cake::find().find_with_related(Fruit).all(db).await?;

Insert

let apple = fruit::ActiveModel {
    name: Set("Apple".to_owned()),
    ..Default::default() // no need to set primary key
};

let pear = fruit::ActiveModel {
    name: Set("Pear".to_owned()),
    ..Default::default()
};

// insert one
let pear = pear.insert(db).await?;

// insert many
Fruit::insert_many(vec![apple, pear]).exec(db).await?;

Update

use sea_orm::sea_query::{Expr, Value};

let pear: Option<fruit::Model> = Fruit::find_by_id(1).one(db).await?;
let mut pear: fruit::ActiveModel = pear.unwrap().into();

pear.name = Set("Sweet pear".to_owned());

// update one
let pear: fruit::ActiveModel = pear.update(db).await?;

// update many: UPDATE "fruit" SET "cake_id" = NULL WHERE "fruit"."name" LIKE '%Apple%'
Fruit::update_many()
    .col_expr(fruit::Column::CakeId, Expr::value(Value::Int(None)))
    .filter(fruit::Column::Name.contains("Apple"))
    .exec(db)
    .await?;

Save

let banana = fruit::ActiveModel {
    id: Unset(None),
    name: Set("Banana".to_owned()),
    ..Default::default()
};

// create, because primary key `id` is `Unset`
let mut banana = banana.save(db).await?;

banana.name = Set("Banana Mongo".to_owned());

// update, because primary key `id` is `Set`
let banana = banana.save(db).await?;

Delete

let orange: Option<fruit::Model> = Fruit::find_by_id(1).one(db).await?;
let orange: fruit::ActiveModel = orange.unwrap().into();

// delete one
fruit::Entity::delete(orange).exec(db).await?;
// or simply
orange.delete(db).await?;

// delete many: DELETE FROM "fruit" WHERE "fruit"."name" LIKE 'Orange'
fruit::Entity::delete_many()
    .filter(fruit::Column::Name.contains("Orange"))
    .exec(db)
    .await?;
 相关资料
  • 假设代码块按需加载模块,如下所示: 想象一下,序列中有几个这样的人;它们在搜索什么标记/类、加载什么模块以及初始化过程中的一些额外步骤方面有所不同,但总体上它们是相同的,并且是独立的。 现在假设您需要引入一个可能依赖于其他模块的新块。i. e. 加载模块魔术表。js如果存在div.magic-table 加载模块魔法表单。js如果存在div.magic-form 加载模块魔术段落。如果p.magi

  • 本文向大家介绍PhotoSwipe异步动态加载图片方法,包括了PhotoSwipe异步动态加载图片方法的使用技巧和注意事项,需要的朋友参考一下 在开发搜房家居M站的时候,搜房家居装修效果图相册展示效果需要用到PhotoSwipe插件来显示图片。 特点: 1. 家居提供的接口,每次只能获取一张图片 2. 装修效果图的张数不限。 3. 从PhotoSwipe用法来看,在PhotoSwipe初始化前必须

  • 我对状态同步有问题。当我点击编辑器的外部(想要关闭它),我想把实际的文本传回给父节点(函数)。但是当我在之外单击时,状态似乎总是落后一步。(例如:如果编辑器内部有,我键入,,我键入,等等)。 如果我在编辑器外单击,将出现的实际状态,如何实现这一点?

  • 我不确定Spring boot异步是如何工作的?我知道webserver有自己的线程池,每个请求都由来自池的线程处理。现在,当我们用spring boot实现异步web服务并配置10个线程时,这是否意味着线程内部有线程?为了澄清,web服务器将向线程分配一个请求。现在当这个线程开始执行并调用一个用@Asynch标记的服务/函数时,它可以创建多个线程来处理请求。请让我知道我的理解是否正确。

  • 本文向大家介绍同步异步动态引入js文件的几种方法总结,包括了同步异步动态引入js文件的几种方法总结的使用技巧和注意事项,需要的朋友参考一下 动态加载js文件 有时候我们需要根据参数不同来引入不同的js文件,用html直接写标签满足不了我们的需求,总结几种方法,以及同步异步加载的各种需求 一.直接加载 二.异步加载,并发执行,但引入js内容不能直接使用 三.同步加载,单步加载,引入js内容可以直接使

  • 本文向大家介绍Highcharts使用简例及异步动态读取数据,包括了Highcharts使用简例及异步动态读取数据的使用技巧和注意事项,需要的朋友参考一下 Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表,并且免费提供给个人学习、个人网站和非商业用途使用。HighCharts支持的图表类型有曲线图、区域图、柱状

  • 异步操作在线程中执行,与主应用程序线程分开。当应用程序调用方法异步执行操作时,应用程序可以在异步方法执行其任务时继续执行。 示例 下面通过一个例子来理解这个概念。在示例程序中使用IO库接受用户输入。 是一种同步方法。它将阻止执行函数调用之后的所有指令,直到方法完成执行。 等待输入。它停止执行并且在收到用户输入之前不再执行任何操作。 以上示例将产生以下输出 - 在计算中,当某个事件在继续之前等待事件

  • 支持Python异步。包括对Core和ORM使用的支持,使用了异步兼容的方言。 1.4 新版功能. 注解 从SQLAlChemy 1.4.3开始的异步扩展现在可以被认为是 测试级 软件。API细节可能会更改,但是在这一点上,不太可能有重大的向后不兼容更改。 参见 对内核和ORM的异步IO支持 -初始功能发布 异步集成 -示例脚本演示了asyncio扩展中核心和ORM使用的工作示例。 Asyncio