#connector #mysql #macro #connection #model #exchanging #mysql-connector

mysql-connector-macros

为mysql-connector crate提供的宏

3个版本

0.0.3 2024年7月26日
0.0.2 2024年6月6日
0.0.1 2024年6月3日

#1111 in 过程宏

Download history 263/week @ 2024-06-01 34/week @ 2024-06-08 6/week @ 2024-06-15 1/week @ 2024-06-22 62/week @ 2024-07-20 47/week @ 2024-07-27

每月109次下载
mysql-connector 中使用

MIT 许可证

29KB
665 代码行

mysql-connector

简单的Rust MySQL连接器,允许交换底层连接。

特性

示例

use std::sync::Arc;

use mysql_connector::{
    macros::*, model::*, Connection, ConnectionOptions, TcpStream, TcpStreamOptions,
};

#[derive(Debug, ModelData, FromQueryResult, ActiveModel, IntoQuery, Model)]
#[mysql_connector(table = "user", primary = "id", auto_increment = "true")]
pub struct User {
    id: u32,
    name: String,
    email: Option<String>,
}

#[tokio::main]
async fn main() {
    dotenv::dotenv().unwrap();
    let mut conn = <Connection<TcpStream>>::connect(Arc::new(ConnectionOptions {
        user: "user".into(),
        password: std::env::var("PASSWORD").unwrap(),
        db_name: Some("db".into()),
        connection: TcpStreamOptions {
            host: "localhost".into(),
            ..Default::default()
        },
        ..Default::default()
    }))
    .await
    .unwrap();

    conn.execute_query(
        "CREATE TABLE `user` (
            `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
            `name` VARCHAR(255) NOT NULL,
            `email` VARCHAR(255)
        )",
    )
    .await
    .unwrap();

    User {
        id: 0,
        name: String::from("foo"),
        email: Some(String::from("[email protected]")),
    }
    .into_active_model()
    .insert(&mut conn)
    .await
    .unwrap();

    User {
        id: 0,
        name: String::from("bar"),
        email: None,
    }
    .into_active_model()
    .insert(&mut conn)
    .await
    .unwrap();

    let users: Vec<User> = conn
        .query(&User::build_query())
        .await
        .unwrap()
        .collect()
        .await
        .unwrap();
    println!("{users:?}");

    conn.disconnect().await.unwrap();
}

依赖

~260–700KB
~17K SLoC