sqlxplus-cli 0.1.0

Code generator for sqlxplus
sqlxplus-cli-0.1.0 is not a library.

sqlxplus-cli

sqlxplus 的代码生成工具,可以从数据库表结构自动生成 Rust Model 代码。

安装

从源码安装

cargo install --path cli

从 crates.io 安装(待发布)

cargo install sqlxplus-cli

使用方法

基本用法

# 交互式选择表
sqlxplus-cli -d "mysql://user:pass@localhost/dbname"

# 生成所有表
sqlxplus-cli -d "mysql://user:pass@localhost/dbname" --all

# 生成指定表
sqlxplus-cli -d "mysql://user:pass@localhost/dbname" -t users -t orders

# 指定输出目录
sqlxplus-cli -d "mysql://user:pass@localhost/dbname" -o src/models

# 预览生成的代码(不写入文件)
sqlxplus-cli -d "mysql://user:pass@localhost/dbname" --dry-run

支持的数据库

  • MySQL: mysql://user:pass@localhost/dbname
  • PostgreSQL: postgres://user:pass@localhost/dbname
  • SQLite: sqlite://path/to/database.dbsqlite:path/to/database.db

选项说明

  • -d, --database-url: 数据库连接 URL(必需)
  • -o, --output: 输出目录,默认为 models
  • -t, --tables: 指定要生成的表名(可多次使用)
  • -a, --all: 生成所有表,不进行交互式选择
  • --overwrite: 覆盖已存在的文件
  • --dry-run: 预览模式,不写入文件
  • --serde: 生成 serde 序列化/反序列化 derives
  • --derive-crud: 生成 CRUD derives(默认启用)

生成示例

假设数据库中有以下表:

CREATE TABLE users (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL,
    is_del TINYINT DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

运行命令:

sqlxplus-cli -d "mysql://user:pass@localhost/dbname" -t users

生成的代码:

#[derive(Debug, sqlx::FromRow, sqlxplus::ModelMeta, sqlxplus::CRUD)]
#[model(table = "users", pk = "id", soft_delete = "is_del")]
pub struct Users {
    pub id: i64,
    pub username: String,
    pub email: String,
    pub is_del: i16,
    pub created_at: Option<chrono::NaiveDateTime>,
}

特性

  • ✅ 自动检测主键字段
  • ✅ 自动检测逻辑删除字段(is_del, is_deleted, deleted_at 等)
  • ✅ 支持 MySQL、PostgreSQL、SQLite
  • ✅ 交互式表选择
  • ✅ 批量生成多个表
  • ✅ 自动生成 mod.rs 模块文件
  • ✅ 类型映射(SQL 类型 → Rust 类型)

类型映射

SQL 类型 Rust 类型
BIGINT i64
INT, INTEGER i32
SMALLINT, TINYINT i16 / i8
VARCHAR, TEXT String
DECIMAL, DOUBLE f64
BOOLEAN, BOOL bool
DATE chrono::NaiveDate
DATETIME, TIMESTAMP chrono::NaiveDateTime
BLOB, BYTEA Vec<u8>
JSON, JSONB serde_json::Value

License

MIT OR Apache-2.0