Movatterモバイル変換


[0]ホーム

URL:


Rust Cookbook

    Working with Postgres

    Create tables in a Postgres database

    postgres-badgecat-database-badge

    Use thepostgres crate to create tables in a Postgres database.

    Client::connect helps in connecting to an existing database. The recipe uses a URL string format withClient::connect. It assumes an existing database namedlibrary, the username ispostgres and the password ispostgres.

    use postgres::{Client, NoTls, Error};fn main() -> Result<(), Error> {    let mut client = Client::connect("postgresql://postgres:postgres@localhost/library", NoTls)?;        client.batch_execute("        CREATE TABLE IF NOT EXISTS author (            id              SERIAL PRIMARY KEY,            name            VARCHAR NOT NULL,            country         VARCHAR NOT NULL            )    ")?;    client.batch_execute("        CREATE TABLE IF NOT EXISTS book  (            id              SERIAL PRIMARY KEY,            title           VARCHAR NOT NULL,            author_id       INTEGER NOT NULL REFERENCES author            )    ")?;    Ok(())}

    Insert and Query data

    postgres-badgecat-database-badge

    The recipe inserts data into theauthor table usingexecute method ofClient. Then, displays the data from theauthor table usingquery method ofClient.

    use postgres::{Client, NoTls, Error};use std::collections::HashMap;struct Author {    _id: i32,    name: String,    country: String}fn main() -> Result<(), Error> {    let mut client = Client::connect("postgresql://postgres:postgres@localhost/library",                                     NoTls)?;        let mut authors = HashMap::new();    authors.insert(String::from("Chinua Achebe"), "Nigeria");    authors.insert(String::from("Rabindranath Tagore"), "India");    authors.insert(String::from("Anita Nair"), "India");    for (key, value) in &authors {        let author = Author {            _id: 0,            name: key.to_string(),            country: value.to_string()        };        client.execute(                "INSERT INTO author (name, country) VALUES ($1, $2)",                &[&author.name, &author.country],        )?;    }    for row in client.query("SELECT id, name, country FROM author", &[])? {        let author = Author {            _id: row.get(0),            name: row.get(1),            country: row.get(2),        };        println!("Author {} is from {}", author.name, author.country);    }    Ok(())}

    Aggregate data

    postgres-badgecat-database-badge

    This recipe lists the nationalities of the first 7999 artists in the database of theMuseum of Modern Art in descending order.

    use postgres::{Client, Error, NoTls};struct Nation {    nationality: String,    count: i64,}fn main() -> Result<(), Error> {    let mut client = Client::connect(        "postgresql://postgres:postgres@127.0.0.1/moma",        NoTls,    )?;    for row in client.query ("SELECT nationality, COUNT(nationality) AS count FROM artists GROUP BY nationality ORDER BY count DESC", &[])? {                let (nationality, count) : (Option<String>, Option<i64>) = (row.get (0), row.get (1));                if nationality.is_some () && count.is_some () {            let nation = Nation{                nationality: nationality.unwrap(),                count: count.unwrap(),        };            println!("{} {}", nation.nationality, nation.count);                    }    }    Ok(())}

    [8]ページ先頭

    ©2009-2025 Movatter.jp