#sqlite #orm #sql #macro-derive

geekorm

SQLite数据库的简单易用ORM

22个版本 (4个破坏性版本)

0.5.2 2024年7月19日
0.5.1 2024年7月4日
0.4.3 2024年6月28日
0.3.3 2024年6月5日
0.1.1 2024年4月18日

#692 in 数据库接口

Download history 680/week @ 2024-04-26 211/week @ 2024-05-03 305/week @ 2024-05-10 145/week @ 2024-05-17 9/week @ 2024-05-24 437/week @ 2024-05-31 207/week @ 2024-06-07 33/week @ 2024-06-14 139/week @ 2024-06-21 318/week @ 2024-06-28 110/week @ 2024-07-05 132/week @ 2024-07-19 41/week @ 2024-07-26

每月173次下载
用于 geekorm-cli

MIT 许可证

195KB
3K SLoC

GeekORM

GitHub Crates.io Version Crates.io Downloads (recent) GitHub Stars GitHub Issues Licence

概述

GeekORM 是一个简单的 对象关系映射,用于增强你的 Rust 开发。

✨ 功能

  • 关注简洁性
  • 依靠Derive宏为你的struct生成代码
    • 使用 Table
    • 使用 Data
  • 动态构建查询
    • SelectCreateUpdateInsert 查询
  • 广泛的crate功能
  • 字段属性助手
    • foreign_key:设置连接的外键
    • rand:生成随机字符串(设置长度、设置前缀、设置环境)
    • hashpassword:生成存储密码的安全哈希(设置算法)
  • 支持后端
  • 文档

📦 使用方法

您可以从 crates.io 安装库

cargo add geekorm

手册 - GitHub

cargo install --git https://github.com/42ByteLabs/geekorm

🏃 入门

安装 geekorm 后,您可以开始使用如下 derive 宏:

use anyhow::Result;
use geekorm::prelude::*;

#[derive(Table, Debug, Default, serde::Serialize, serde::Deserialize)]
struct Users {
    #[geekorm(primary_key, auto_increment)]
    id: PrimaryKeyInteger,

    #[geekorm(unique)]
    username: String,

    #[geekorm(hash)]
    password: String,

    #[geekorm(new = "UserType::User")]
    user_type: UserType,

    #[geekorm(new = "chrono::Utc::now()")]
    created_at: chrono::DateTime<chrono::Utc>,

    postcode: Option<String>,
}

#[derive(Data, Debug, Default, Clone)]
enum UserType {
    Admin,
    #[default]
    User,
}

#[tokio::main]
async fn main() -> Result<()> {
    // Setup the database and connection
    let db = libsql::Builder::new_local(":memory:").build().await?;
    let connection = db.connect()?;

    // Create the table in the database
    Users::create_table(&connection).await?;

    // Creating a new User
    let mut user = Users::new("GeekMasher", "ThisIsNotMyPassword");
    // Saving the new User in the database
    user.save(&connection).await?;
    // Print the Primary Key value set by the database (auto_increment)
    println!("User ID: {:?}", user.id);

    // Updating the User
    user.user_type = UserType::Admin;
    user.update(&connection).await?;

    // Fetch the Admin Users
    let admin_users = Users::fetch_by_user_type(&connection, UserType::Admin).await?;
    println!("Admin Users: {:?}", admin_users);

    // Helper functions built right into the struct by GeekORM
    user.hash_password("ThisIsStillNotMyPassword")?;

    // Go back to basics and build your own queries dynamically using
    // the QueryBuilder built into GeekORM
    let query = Users::query_select()
        .where_eq("username", "GeekMasher")
        .order_by("id", geekorm::QueryOrder::Desc)
        .limit(1)
        .build()?;

    // Execute the query and return the results
    let users = Users::query(&connection, query).await?;
    println!("Users: {:?}", users);

    Ok(())
}

🏄 创建功能

GeekORM 支持许多可选择的特性。您可以通过以下方式添加特性:使用 cargo add geekorm -F all 或直接在您的 Cargo.toml 文件中添加它们。

  • all:启用所有主要稳定功能
  • new: 生成 Table::new(...) 函数
  • helpers: 生成多个辅助函数
    • 选择 Table::select_by_primary_key()
    • 选择列 Table::select_by_{field}()
  • rand: 支持生成随机字符串
  • hash: 支持生成密码哈希
  • 后端
    • libsql: 添加 LibSQL 后端支持

🧑‍🤝‍🧑 维护者 / 贡献者

Mathew Payne
Mathew Payne

💻 代码 审阅的 Pull Requests
Cale
Cale

🎨

🦸 支持

如果有错误或功能请求,请创建 GitHub Issues

本项目使用 语义版本化 (v2),在主要版本发布时,将发生重大变化。

📓 许可证

本项目采用 MIT 开源许可证。请参阅 MIT 以获取完整条款。

依赖项

~1.7–3.5MB
~64K SLoC