5 个版本
0.1.6 | 2024 年 5 月 17 日 |
---|---|
0.1.5 | 2024 年 3 月 18 日 |
0.1.3 | 2023 年 11 月 13 日 |
0.1.2 | 2023 年 10 月 31 日 |
0.1.1 | 2023 年 10 月 29 日 |
#1572 在 数据库接口
每月 48 次下载
18KB
77 行
为 sqlx 实现 Create、Read、Update 和 Delete (CRUD) 方法。
使用
将以下内容添加到项目的 Cargo.toml 文件中
[dependencies]
anorm = { virsion = "0.1", features = ["mysql"] }
sqlx = { version = "0.7", features = ["mysql","runtime-tokio-native-tls"] }
- features: mysql, postgres, sqlite, mssql
示例
#[derive(Debug, Crud, sqlx::FromRow)]
#[anorm(rename = "users")] // rename table name
struct User {
// anorm(id) // default first field is primary key
#[anorm(seq)] // sequence field, insert will ignore this field
pub id: u64,
#[anorm(rename = "name")] // rename field name
#[anorm(by)] // generate query_by_field,update_by_field,delete_by_field
pub name: String,
#[anorm(update)] // generate method update_xxx.
pub password: String,
#[anorm(skip)] // ignore field
#[sqlx(skip)]
pub addr: Option<String>,
// #[sqlx(skip)]
// pub age: i32,
}
pub async fn get_pool() -> Result<MySqlPool> {
MySqlPoolOptions::new()
.connect("mysql://root:[email protected]:3306/hello").await
}
#[tokio::test]
async fn test_query() {
let pool=get_pool().await.unwrap();
let u = User::get(&pool, 1).await;
println!("get {:?}", u);
let u = User::get_by(&pool, "where id=?", args!(1)).await;
println!("get_by {:?}", u);
let u = User::query_by_name(&pool, "plucky".into()).await;
println!("query_by_name {:?}", u);
let u =User::query(&pool).await;
println!("list {:?}",u);
// u.update(&pool).await;
// u.insert(&pool).await;
// u.delete(&pool).await
// let list = vec![User::new(0, "lusy3", "123456"),User::new(0, "lusy5", "123456")];
// let r =User::insert_all(&pool, list).await;
// println!("list: {:?}",r);
}
#[derive(Crud)]
生成方法:get, get_by, query, query_by, update, delete, insert, insert_all。
属性
#[anorm(id)]
默认第一个字段是主键或设置。
#[anorm(seq)]
序列字段,自动递增。插入将跳过此字段。
#[anorm(rename="name")]
重命名表名或字段名。默认表名由结构名称到_table_case: UserDetail => user_detail。默认字段名由字段名称到_snake_case: UserDetail => user_detail。
#[anorm(skip)]
忽略字段。使用 sqlx::FromRow,跳过需要 #[anorm(skip)]
和 #[sqlx(skip)]
#[anorm(update)]
生成方法 update_xxx。
#[anorm(通过)]
生成 qet_by_field, query_by_field, update_by_field, delete_by_field。
#[derive(FromRow)]
为结构体生成 impl sqlx::FromRow。或者使用 #[derive(sqlx::FromRow)]
。如果使用 sqlx::FromRow,如果需要跳过字段,则同时添加 #[anorm(skip)]
和 #[sqlx(skip)]
。
macro_export
args
let args = args!(&name, age);
query
query!("insert into users (name, password) values (?,?)", name, password).execute(&pool).await
query_as
query_as!(User, "select * from users where name = ?", name).fetch_one(&pool).await
依赖
~140KB