Aster文档
搜索 Aster 文档
ESC
产品
版本

输入关键词开始搜索。

    文档目录

    ASTER ORM / 02

    ORM 查询与接入

    类型化 Schema、不可变 Query、异步 Executor 和受控原生 SQL。

    先声明表结构,再组合类型化查询。编译查询与执行查询是两个独立步骤。

    编译类型化查询

    use aster_orm::{orm_table, select_from, OrderDirection, PostgresDialect, Query};
    
    orm_table! {
        pub struct Person => "person" {
            id: i64 => "id",
            name: String => "name",
            age: i32 => "age",
        }
    }
    
    fn main() -> Result<(), aster_orm::Error> {
        let query = select_from::<Person>()
            .select((Person::id(), Person::name()))
            .filter(Person::age().gte(18))
            .order_by(Person::name(), OrderDirection::Asc)
            .limit(20)
            .compile(&PostgresDialect)?;
    
        println!("sql = {}", query.sql);
        println!("parameters = {:?}", query.parameters);
        assert_eq!(query.parameters.len(), 2);
        Ok(())
    }
    

    生成的 SQL 使用方言占位符。年龄和 LIMIT 都作为绑定参数传递。方言会拒绝不支持的语法,不会生成近似 SQL。

    选择运行时

    默认 SQLite 运行时:

    [dependencies]
    aster-orm = "0.3"
    tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
    

    使用内置 PostgreSQL 驱动:

    aster-orm = { version = "0.3", default-features = false, features = ["postgres"] }
    

    只使用 Builder 和 Dialect:

    aster-orm = { version = "0.3", default-features = false }
    

    执行 SQLite 往返

    SqliteExecutor::open_in_memory 创建真实的内存数据库。Database::new(SqliteDialect, executor) 把方言与 Executor 组合。

    常用执行接口
    接口用途
    execute_schema执行受控 Schema 初始化语句
    execute执行 INSERT、UPDATE 或 DELETE Builder
    fetch_one_as把单行结果解码为指定 Rust 类型
    sql_query::<Output>执行经过审查的静态 SQL,并绑定运行时值

    一行和可选行接口会拒绝意外基数。数组、UUID、JSON、时间和 Decimal 使用经过检查的转换。

    组合复杂 SQL

    Builder 覆盖 Join、CTE、子查询、聚合、窗口、集合操作、Cast 和冲突处理。PostgreSQL 行锁、表锁、事务策略和超时保持类型化。

    需要 SKIP LOCKED 任务租赁时,把候选 CTE、UPDATE FROM 和表达式赋值放在同一个参数化语句中。不要拼接 SQL 片段。

    sql_query 是受控逃生口。SQL 文本必须经过审查且保持静态,动态值仍通过 bind 传入。

    实现依据