6个版本

0.3.3 2024年6月26日
0.3.2 2024年6月26日
0.2.0 2024年6月26日
0.1.0 2024年6月26日

#604数据库接口

36 每月下载量
用于 迁移

MIT 许可证

30KB
828

db_dsl

一组struct(Table, Column, Index, ForeignKey),通过ToSql trait转换为SQL。适用于rigz-db和migrations。

pub trait ToSql {
    fn to_sqlite(&self) -> Option<String> {
        None
    }

    fn to_sql(&self, dialect: Dialect) -> Option<String> {
        match dialect {
            Dialect::Sqlite => self.to_sqlite(),
        }
    }
}

用法

use db_dsl::{Table, Column, Index, ForeignKey, Dialect, ToSql};
use db_dsl::TableDefinition::{column, index, foreign_key, primary_key};

pub fn main() {
    let table = Table::new("users", vec![
        column(Column::new("name", DataType::String)),
        index(Index::unique(vec!["name"])),
        foreign_key(ForeignKey::new("accounts")),
    ]);
    let sql = table.sql_up(Dialect::Sqlite).unwrap();
    println!("{}", sql);
    /**
     * CREATE TABLE IF NOT EXISTS users (
     *     id BIGINT PRIMARY KEY AUTOINCREMENT,
     *     name TEXT,
     *     account_id BIGINT NOT NULL,
     * );
     * CREATE UNIQUE INDEX idx_users_name ON users (name);
     * CREATE FOREIGN KEY fk_users_id (account_id) REFERENCES accounts (id);
     */
}

待办事项

  • 更好地支持引用/外键,目前您必须手动添加accounts列
  • 支持Postgres, MySQL和SQL Server
  • 添加查询构建器

依赖项

~0.7–1.4MB
~28K SLoC