#mysql #derive #sql #traits #procedural #proc-macro #accompany

derive-sql-mysql

配套 derive-sql 包。实现了 DeriveMySql 过程宏,以实现适用于MySQL的特质。

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

Download history 125/week @ 2024-06-03 49/week @ 2024-06-10 290/week @ 2024-07-15 150/week @ 2024-07-22 55/week @ 2024-07-29

每月下载量 286次
3 个包中使用(通过 derive-sql

MIT 许可证

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