7 个版本

使用旧 Rust 2015

0.3.0 2018年11月19日
0.2.4 2018年11月15日
0.1.0 2018年11月12日

#1948数据库接口

每月 22 次下载

MIT 许可证

9KB
192

dbi

基于 Rust 的数据库接口,松散地基于 Java 的 SQL Objects API 的 Jdbi

使用 Rust 1.30 的过程宏。适用于稳定版(当前)Rust。

目前仅支持 mysql(通过 mysql_async),但计划支持其他数据库系统。

用法

定义一个符合 params 和所需结果的查询方法的 trait,并在方法属性中传入 SQL 字符串

#[dbi_trait(impl_for(new="UserDao"))]
pub trait UserDaoImpl {

    #[sql_query("SELECT * FROM users WHERE id = :id", use_named_params=true)]
    fn find_by_id(self, id: i32) -> Box<Future<Item=Option<User>, Error=my::errors::Error> + Send>;

    #[sql_query("SELECT * FROM users WHERE id = ?", mapper="|row| { let (id, full_name) = my::from_row_opt(row)?; Ok(User {id, full_name}) }")]
    fn find_by_id_faster(self, id: i32) -> Box<Future<Item=Option<User>, Error=my::errors::Error> + Send>;

    #[sql_query("SELECT name FROM users")]
    fn find_all_names(self) -> Box<futures::Future<Item=Vec<String>, Error=my::errors::Error> + Send>;

    #[sql_update("INSERT INTO users (name) VALUES (:name)", use_named_params=true)]
    fn create_user_named(self, name: String) -> Box<futures::Future<Item=Option<u64>, Error=my::errors::Error> + Send>;

}

这将创建一个“连接-like”的新类型包装器,您可以使用它

let fut = UserDao(conn).find_by_id(2);

trait 方法必须返回一个类似于 Box<Future<Item=R> ...> 的值,其中 R 是一个 Option<T>Vec<T>,T 是可以从数据库行中提取的类型。

目前支持以下选项

  • use_named_params:使用方法的参数名称而不是参数在格式化查询参数中的位置。
  • mapper:使用其他表达式映射到结果类型。可以是闭包或其他方法。

计划更多功能,尽管这个库不会提供 Jdbi 所有的选项。

变更日志

  • 0.3.0

    • 添加 sql_batch。目前不返回任何值(仅适用于返回 Future<Item=()>,...> 的方法)。类似于 Jdbi,每个参数都作为其自己的容器传递(例如,每个命名参数都会有一个看起来像 name: Vec<String> 的方法参数)。

依赖项

~21MB
~409K SLoC