11个版本 (5个破坏性更新)
新增 0.12.1 | 2024年8月26日 |
---|---|
0.12.0 | 2024年8月26日 |
0.11.3 | 2024年7月22日 |
0.10.0 | 2024年6月9日 |
0.7.0 | 2024年2月4日 |
#1 in #accompany
每月下载量 286次
在 3 个包中使用(通过 derive-sql)
29KB
429 行
这是一个过程宏,用于自动为提供的结构体生成一个与MySQL数据库兼容的 Sqlable
特质,该数据库是通过使用 mysql
包连接的 https://crates.io/crates/mysql。
使用方法
您编写
#[derive(DeriveMysql)]
pub struct Person {
name: String,
age: u32,
}
然后您可以使用
let pool = ::mysql::Pool::new("mysql://test@localhost/simpledb").unwrap();
let mut connection = pool.get_conn().unwrap();
let mut db: PersonMysql<_> = derive_sql::proxy::mysql::Conn::from(connection).into();
// initialise
db.create_table().unwrap();
// Insert entries
db.insert(Person {name: "Abi".to_string(), age: 31 }).unwrap();
db.insert(Person {name: "Bert".to_string(), age: 32 }).unwrap();
db.insert(Person {name: "Charlie".to_string(), age: 33 }).unwrap();
// Query
let persons: Vec<Person> = db.select(Box::new(SimpleFilter::try_from(("age", 32)).unwrap())).unwrap();
assert!(persons[0].name.eq("Bert"));
// Update
db.update(Box::new(SimpleFilter::try_from(("name", "Abi")).unwrap()), Person { name: "Abi".to_string(), age: 32 }).unwrap();
// Delete
db.delete(Box::new(SimpleFilter::try_from(("name", "Abi")).unwrap())).unwrap();
// Clear the table
db.delete_table().unwrap();
容器属性
#[derive_sqlite(ident = ...)]
覆盖rusqlite
包装器的名称,从{class}Mysql
;#[derive_sqlite(table_name = "...")]
指定表的名称(默认为容器名称的小写);
字段属性
#[derive_sqlite(is_primary_key = true)]
指定一个字段为主键。只能指定一个主键。主键字段在表中是唯一的。主键不能是字符串 - 以下代码将无法编译
#[derive(DeriveMysql)]
pub struct Person {
#[derive_sqlite(is_primary_key = true)]
name: String,
age: u32,
}
#[derive_sqlite(on_insert = ...)]
指定一个函数类型为fn() -> {type}
,其中{type}
对应字段的类型。当插入项目时调用该函数,并将函数返回的值分配给项目插入之前该字段。典型用途是分配创建日期。#[derive_sqlite(on_update = ...)]
指定一个函数类型为fn() -> {type}
,其中{type}
对应字段的类型。当更新项目时调用该函数,并将函数返回的值分配给更新之前该字段。典型用途是分配最后修改日期。
依赖项
~0.8–1.3MB
~26K SLoC