Connessione a MySQL e MariaDB in Rust con sqlx

Mattepuffo's logo
Connessione a MySQL e MariaDB in Rust con sqlx

Connessione a MySQL e MariaDB in Rust con sqlx

sqlx è una libreria per Rust che ci consente di connetterci a svariati database.

Non è un ORM, ma un wrapper per diversi db, il che è comodo quando dobbiamo passare da un db ad un altro.

In questo articolo vediamo come usarlo per connetterci a MySQL o MariaDB.

Queste le dipendenze da mettere nel cargo.toml:

[dependencies]
sqlx = { version = "0.8", features = ["runtime-async-std", "mysql"] }
async-std = "1.13.0"

Qui sotto un esempio di codice:

use sqlx::{Error, FromRow, MySql, MySqlPool, Pool};

use async_std::task;

#[derive(FromRow)]
struct Persona {
    id: i32,
    nome: String,
}

async fn connect() -> Result<Pool<MySql>, Error> {
    MySqlPool::connect(
        "mysql://USER:PWD@HOST:3306/DB",
    )
    .await
}

async fn run_query() {
    let result = task::block_on(connect());

    match result {
        Ok(pool) => {
            let query_string = "SELECT * FROM persone";
            let query_result = sqlx::query_as::<_, Persona>(query_string)
                .fetch_all(&pool)
                .await
                .unwrap();

            println!("Numero di records: {}", query_result.len());

            for (idx, p) in query_result.iter().enumerate() {
                println!("No. Riga {}. ID: {}, Nome: {}", idx + 1, &p.id, &p.nome);
            }
        }

        Err(err) => {
            println!("Errore: [{}]", err.to_string());
        }
    }
}

fn main() {
    task::block_on(run_query());
}

Enjoy!


Condividi

Commentami!