6 个版本
新版本 0.12.1 | 2024年8月26日 |
---|---|
0.12.0 | 2024年8月26日 |
0.11.3 | 2024年7月22日 |
#89 in #statement
每月下载量 291
在 4 个包中使用 (通过 derive-sql)
30KB
398 行
过程宏,用于自动生成SQL语句特性 TableStatement
、SelectStatement
、InsertStatement
、DeleteStatement
,为提供的结构体以及SQL参数到和从SQL行之间的转换。
如何使用
您编写
#[derive(derive_sql::DeriveSqlStatement)]
pub struct Person {
name: String,
age: u32,
}
然后您可以使用
use derive_sql::structs::*;
fn handle<Con, Row>(s: &mut Con)
where Con: traits::Connection<Row>,
Row: traits::Row,
{
use derive_sql::traits::{Table, SelectV2, Insert, Delete, Update};
let db = SqlPerson::default();
// initialise
db.create(s).unwrap();
// Insert entries
db.insert(s, &Person {name: "Abi".to_string(), age: 31 }).unwrap();
db.insert(s, &Person {name: "Bert".to_string(), age: 32 }).unwrap();
db.insert(s, &Person {name: "Charlie".to_string(), age: 33 }).unwrap();
// Query
let persons: Vec<Person> = db.select_with_filter(s, &Field::from("age").eq(32)).unwrap();
assert!(persons[0].name.eq("Bert"));
// Update
db.update_with_filter(s, &Field::from("name").eq("Abi"), &Person { name: "Abi".to_string(), age: 32 }).unwrap();
// Delete
db.delete_with_filter(s, &Field::from("name").eq("Abi")).unwrap();
// Clear the table
db.drop(s).unwrap();
}
let pool = ::mysql::Pool::new("mysql://test@localhost/simpledb").unwrap();
let mut connection = pool.get_conn().unwrap();
handle(&mut connection);
容器属性
#[derive_sqlite(ident = ...)]
覆盖包装器的名称,从Sql{class}
;#[derive_sqlite(table_name = "...")]
指定表名(默认为容器名称的小写);#[derive_sqlite(read_only = true/false)]
指定是否实现只读(即表、选择、插入、更新、删除,参数转换和行转换)或只读语句(即选择和行转换)
字段属性
#[derive_sqlite(is_primary_key = true)]
指定字段之一为主键。只能指定一个主键。主键字段在表中是唯一的。主键不能是字符串 - 以下代码将无法编译
#[derive(DeriveMysql)]
pub struct Person {
#[derive_sqlite(is_primary_key = true)]
name: String,
age: u32,
}
依赖关系
~0.7–1.2MB
~24K SLoC