28 个版本 (5 个重大更改)
| 新功能 0.7.6 | 2024 年 8 月 24 日 | 
|---|---|
| 0.7.4 | 2024 年 7 月 18 日 | 
| 0.4.10 | 2024 年 3 月 23 日 | 
| 0.2.8 | 2023 年 12 月 27 日 | 
| 0.2.5 |  | 
#1307 在 数据库接口
每月 462 次下载
94KB
 2K  SLoC
重大更改
从 0.4.13 版本开始,UDT 字段必须与数据库中相同的顺序。这是由于 scylla 驱动程序的限制,它不支持命名绑定值。早期版本会自动按名称排序字段,但这种情况不再存在,因为 ORM 无法与现有的 UDT 一起工作。
自动迁移工具
 charybdis-migrate 工具可以自动将数据库迁移,无需手动编写迁移脚本。它遍历项目文件,并根据模型定义和数据库之间的差异生成迁移。它支持以下操作
安装
  cargo install charybdis-migrate
使用方法
migrate --hosts <host> --keyspace <your_keyspace> --drop-and-replace (optional)
自动迁移
- 
charybdis-migrate允许自动迁移到数据库,无需手动编写迁移脚本。它期望src/models文件,并根据模型定义和数据库之间的差异生成迁移。它支持以下操作- 
创建新表 
- 
创建新列 
- 
删除列 
- 
更改字段类型(使用 --drop-and-replace标志删除和重新创建列)
- 
创建二级索引 
- 
删除二级索引 
- 
创建 UDT 
- 
创建物化视图 
- 
表选项 #[charybdis_model( table_name = commits, partition_keys = [object_id], clustering_keys = [created_at, id], table_options = r#" CLUSTERING ORDER BY (created_at DESC) AND gc_grace_seconds = 86400 "# )] #[derive(Serialize, Deserialize, Default)] pub struct Commit {...}⚠️ 如果表已存在,表选项将生成不包含 CLUSTERING ORDER和COMPACT STORAGE选项的 alter table 查询。未添加模型删除功能。如果您删除了模型,则需要手动删除表。 
 
- 
- 
运行迁移⚠️ 如果您正在处理现有数据集,在运行迁移之前,您需要确保您的**模型**定义结构在表名、列名、列类型、分区键、聚类键和二级索引方面与数据库匹配,以避免意外更改结构。如果结构匹配,则不会运行任何迁移。如上所述,如果没有表的模型定义,它将不会删除它。将来,我们将添加 modelize命令,该命令将从现有数据源生成src/models文件。
- 
全局二级索引如果存在模型 #[charybdis_model( table_name = users, partition_keys = [id], clustering_keys = [], global_secondary_indexes = [username] )]生成的查询将如下所示: CREATE INDEX ON users (username);
- 
本地二级索引范围在分区键上的索引 #[charybdis_model( table_name = menus, partition_keys = [location], clustering_keys = [name, price, dish_type], global_secondary_indexes = [], local_secondary_indexes = [dish_type] )]生成的查询将如下所示: CREATE INDEX ON menus((location), dish_type);
定义表
 use charybdis::macros::charybdis_model;
 use charybdis::types::{Text, Timestamp, Uuid};
 
 #[charybdis_model(
     table_name = users,
     partition_keys = [id],
     clustering_keys = [],
     global_secondary_indexes = [username],
     local_secondary_indexes = [],
 )]
 pub struct User {
     pub id: Uuid,
     pub username: Text,
     pub email: Text,
     pub created_at: Timestamp,
     pub updated_at: Timestamp,
     pub address: Address,
 }
定义UDT(用户定义类型)
 use charybdis::macros::charybdis_udt_model;
 use charybdis::types::Text;
 
 #[charybdis_udt_model(type_name = address)]
 pub struct Address {
     pub street: Text,
     pub city: Text,
     pub state: Option<Text>,
     pub zip: Text,
     pub country: Text,
 }
定义物化视图
use charybdis::macros::charybdis_view_model;
use charybdis::types::{Text, Timestamp, Uuid};
#[charybdis_view_model(
    table_name=users_by_username,
    base_table=users,
    partition_keys=[username],
    clustering_keys=[id]
)]
pub struct UsersByUsername {
    pub username: Text,
    pub id: Uuid,
    pub email: Text,
    pub created_at: Timestamp,
    pub updated_at: Timestamp,
}
生成的自动迁移查询将如下所示
CREATE MATERIALIZED VIEW IF NOT EXISTS users_by_email
AS SELECT created_at, updated_at, username, email, id
FROM users
WHERE email IS NOT NULL AND id IS NOT NULL
PRIMARY KEY (email, id)
依赖项
~16–30MB
~403K SLoC