1 个不稳定版本
0.1.0 | 2023年4月5日 |
---|
#22 在 #sea-orm
11KB
157 行
sea-orm-verify
提供 Verify
衍生宏。
#[derive(DeriveEntityModel, Verify)]
#[derive(Debug, Clone, PartialEq)]
#[sea_orm(table_name = "task")]
pub struct Model {
#[sea_orm(primary_key)]
pub id: u32,
pub finish_at: Option<DateTime>,
}
生成
impl Model {
async fn _verify() {
sqlx::query_as!(Self, "SELECT id, finish_at FROM task");
}
}
这将导致sqlx查询_as宏在编译时验证结构体字段,需要设置DATABASE_URL,例如使用.env或sqlx离线数据。请参阅 docs.rs/sqlx
它还需要在项目中作为依赖项包含sqlx,例如对于Postgres,在Cargo.toml中需要
sqlx = { version = "0.6", features = ["runtime-tokio-rustls", "postgres"] }
请注意,sqlx和sea-orm列映射可能不完全兼容,此检查可能无法捕获一些列类型不匹配,您仍然有
在 #[sea_orm()
内支持的struct属性
table_name
- 获取数据库表名schema_name
- 获取数据库模式名(用于Postgres)
在 #[verify()]
内支持的字段属性
type_override
- 覆盖sqlx类型,如 强制不同的/自定义类型 所述,对于自定义枚举很有用。枚举需要用#[derive(sqlx::Type)
和#[sqlx(type_name = "integer")]
进行注解not_null
- 强制列不可为空,例如对于db视图,sqlx可能获取了错误的可空性。null
- 与not_null
相同,但强制列可为空
依赖项
~285–730KB
~17K SLoC