12个版本 (重大变更)
0.10.0 | 2024年1月24日 |
---|---|
0.8.0 | 2023年12月22日 |
0.7.0 | 2023年7月5日 |
0.6.0 | 2022年6月25日 |
0.3.0-alpha.0 | 2020年11月18日 |
在数据库接口中排名1921
每月下载量55
14KB
210 行
sqlxinsert
警告:用于私有项目
用于将结构体插入SQL的 derive宏。
无需手动创建插入查询并绑定所有属性
let query = r#"
insert into article
( title, subtitle, url, text )
values
( $1, $2, $3, $4 )
returning *
"#;
let result: Article = sqlx::query_as::<_, Article>(query)
.bind(&article.title)
.bind(&article.subtitle)
.bind(&article.url)
.bind(&article.text)
.fetch_one(&mut conn)
.await?;
使用 derive宏可以简化为以下形式
let res = car.insert::<Car>(&pool, "cars").await?
不同输入和输出结构体的示例。
#[derive(Default, Debug, std::cmp::PartialEq, sqlx::FromRow)]
struct Car {
pub id: i32,
pub name: String,
pub color: Option<String>
}
#[derive(Default, Debug, sqlx::FromRow, sqlxinsert::PgInsert)]
struct CreateCar {
pub name: String,
pub color: Option<String>,
}
impl CreateCar {
pub fn new<T: Into<String>>(name: T) -> Self {
CreateCar {
name: name.into(),
color: None,
}
}
}
#[tokio::main]
async fn main() -> sqlx::Result<()>{
let url = "postgres://user:pass@localhost:5432/test_db";
let pool = sqlx::postgres::PgPoolOptions::new().connect(&url).await.unwrap();
let car_skoda = CreateCar::new("Skoda");
let res: Car = car_skoda.insert::<Car>(pool, "cars").await?;
Ok(())
}
构建
makebuild
测试
要求:已安装 docker
maketestall
依赖
~12–27MB
~434K SLoC