#introspection #mysql #fake #table #schema #postgresql

bin+lib dbspec

数据库自省和模型生成

2 个不稳定版本

0.2.0 2024年5月1日
0.1.0 2024年5月1日

#1406数据库接口

MIT 许可证

21KB
406

Db Introspection Crate

一个数据库自省和生成库。

概述

此库允许您为您的实时数据库创建模拟数据。

特性

  • 使用异步操作连接到 PostgreSQL 或 MySQL 数据库。
  • 检索有关表及其名称、类型和模式等详细信息。
  • 获取列的详细信息,如名称、数据类型和可空性。
  • 使用简单的宏生成模拟数据

使用方法

要使用此库,请确保您有一个运行并可访问的 PostgreSQL 或 MySQL 数据库。您可以在运行主应用程序时指定数据库的连接字符串,该应用程序利用此库来获取和显示数据库模式信息。

库使用

获取列及其类型

要获取所有表列表,请使用 get_tables() 函数

use dbspec::get_tables;

#[tokio::main]
async fn main() {
    let all_my_tables = get_tables("connection_string").await;
    // ...
}

您将能够通过使用 faking!() 宏来生成模拟数据。

use dbspec::faking;
use dbspec::fakeit; // or your choice of faking libraries

faking!(
    Id, id: String, || unique::uuid_v4();
    CreatedAt, created_at: chrono::DateTime<Utc>, random_datetime;
    UpdatedAt, updated_at: chrono::DateTime<Utc>, random_datetime;
    Gender, gender: String, || gender();
    Age, age: i32, || random_number_between(18, 100);
);

fn random_number_between(start: i32, end: i32) -> i32 {
    rand::thread_rng().gen_range(start..=end)
}
fn random_datetime() -> DateTime<Utc> {
    let data = datetime::date();
    DateTime::from_timestamp(data.secs, data.nsecs).expect("invalid or out-of-range datetime")
}

这在将列映射以获取随机设计值时特别有用,例如

async fn generate_new_user() {
    for i in 0..10 {
        let user = User {
            id: match_struct("id"),
            username: match_struct("username"),
        }
    }
}

依赖关系

~13–26MB
~399K SLoC