欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Rust?連接?PostgreSQL?數(shù)據(jù)庫的詳細(xì)過程

 更新時間:2022年01月22日 09:09:13   作者:yangxu.pro  
這篇文章主要介紹了Rust?連接?PostgreSQL?數(shù)據(jù)庫的完整代碼,本文圖文實例代碼相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

pgxr 是一個 Rust 的 crate 庫,可以實現(xiàn)用 Rust 語言來編寫 PostgreSQL 的擴(kuò)展函數(shù)(相當(dāng)于存儲過程)。

這次,我們使用 postgres 這個 crate 來連接和操作 PostgreSQL 數(shù)據(jù)庫。

創(chuàng)建好項目后,在 cargo.toml 里添加 postgres 的依賴:

首先,導(dǎo)入相關(guān)的類型,并創(chuàng)建一個 Person struct:

再創(chuàng)建 create_db 函數(shù),用來創(chuàng)建數(shù)據(jù)庫和表,它返回一個 Result,里面可能是 Client 或錯誤:

注意,Client::connect() 函數(shù)所接受的連接字符串可以是兩種形式的:

Key-Value 形式。例如:Client::connect("host=localhost user=postgres", NoTls)?; 具體的 key 需要查閱官方文檔。URL 形式。本例中使用的是 URL 形式。

一個相對完整的數(shù)據(jù)庫連接字符串 URL 格式是:

postgres://username[:password]@host[:port][/database],其中 password、port、database 都是可選的。所以上面代碼中做了相應(yīng)的判斷處理。

Client::connect() 函數(shù)的第二個參數(shù)用的是 NoTls,為了簡單起見,這里我們不使用 TLS。

第 30、32 行,使用 Client 的 execute 方法先刪除數(shù)據(jù)表(如果存在的話),然后再創(chuàng)建 person 表。

最后返回 Client。

接下來,創(chuàng)建 insert_data 函數(shù),來插入一些數(shù)據(jù):

注意該函數(shù)的參數(shù) Client 必須是 mut 的。

再創(chuàng)建一個查詢數(shù)據(jù)的函數(shù):

這里,我們直接對 Client 的 query 方法返回的結(jié)果進(jìn)行遍歷,最后方法返回一個 Vec。

最后,在 main 函數(shù)里依次調(diào)用這些函數(shù),并把查詢結(jié)果打印出來:

結(jié)果如下:

全部代碼如下:

use postgres::{error::Error, Client, NoTls};
 
#[derive(Debug)]
struct Person {
    id: i32,
    name: String,
    data: Option<Vec<u8>>,
}
fn create_db() -> Result<Client, Error> {
    let username = "postgres";
    let password = "postgres";
    let host = "localhost";
    let port = "5432";
    let database = "rust2021";
    let conn_str = &format!(
        "postgres://{}{}{}@{}{}{}{}{}",
        username,
        if password.is_empty() { "" } else { ":" },
        password,
        host,
        if port.is_empty() { "" } else { ":" },
        port,
        if database.is_empty() { "" } else { "/" },
        database
    );
    let mut client = Client::connect(conn_str, NoTls)?;
    let _ = client.execute("DROP TABLE person", &[]);
    client.execute(
        "CREATE TABLE person (
        id      SERIAL PRIMARY KEY,
        name    TEXT NOT NULL,
        data    BYTEA
    )",
        &[],
    )?;
    Ok(client)
fn insert_data(client: &mut Client) -> Result<(), Error> {
    let p1 = Person {
        id: 1,
        name: "Dave".to_string(),
        data: None,
    };
    let p2 = Person {
        id: 2,
        name: "Nick".to_string(),
        "INSERT INTO person (id, name, data)
    VALUES ($1, $2, $3),
    ($4, $5, $6)",
        &[&p1.id, &p1.name, &p1.data, &p2.id, &p2.name, &p2.data],
    Ok(())
fn get_data(client: &mut Client) -> Result<Vec<Person>, Error> {
    let mut persons = Vec::new();
    for row in client.query("SELECT id, name, data FROM person", &[])? {
        persons.push(Person {
            id: row.get(0),
            name: row.get(1),
            data: row.get(2),
        });
    }
    Ok(persons)
fn main() -> Result<(), Error> {
    let mut client = create_db()?;
    insert_data(&mut client)?;
    let persons = get_data(&mut client)?;
    for p in persons {
        println!("Person: {:?}", p);

到此這篇關(guān)于Rust 連接 PostgreSQL 數(shù)據(jù)庫的文章就介紹到這了,更多相關(guān)Rust  PostgreSQL 數(shù)據(jù)庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • Rust常用特型之Drop特型

    Rust常用特型之Drop特型

    本文主要介紹了Rust常用特型之Drop特型,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • 詳解Rust中的workspace

    詳解Rust中的workspace

    這篇文章主要向大家介紹Rust中的workspace,主要內(nèi)容包括基礎(chǔ)應(yīng)用、實用技巧、原理機(jī)制等方面,這個概念在Rust中是通用的,只不過maven換成了cargo,而模塊變成了crate,下面跟著小編通過一個例子給大家介紹下
    2022-03-03
  • rust智能指針的具體使用

    rust智能指針的具體使用

    智能指針是一些數(shù)據(jù)結(jié)構(gòu),它們的行為類似于指針但擁有額外的元數(shù)據(jù)和附加功能,本文就來介紹一下rust智能指針的具體使用,感興趣的可以了解一下
    2023-12-12
  • rust將bitmap位圖文件另存為png格式的方法

    rust將bitmap位圖文件另存為png格式的方法

    通過添加依賴,轉(zhuǎn)換函數(shù)和單元測試操作步驟來解決將bitmap位圖文件另存為png格式文件,本文通過實例代碼給大家介紹的非常詳細(xì),對rust bitmap位另存為png格式的操作方法感興趣的朋友一起看看吧
    2024-03-03
  • Rust指南之生命周期機(jī)制詳解

    Rust指南之生命周期機(jī)制詳解

    Rust?生命周期機(jī)制是與所有權(quán)機(jī)制同等重要的資源管理機(jī)制,之所以引入這個概念主要是應(yīng)對復(fù)雜類型系統(tǒng)中資源管理的問題,這篇文章主要介紹了Rust指南之生命周期機(jī)制詳解,需要的朋友可以參考下
    2022-10-10
  • Rust中的Copy和Clone對比分析

    Rust中的Copy和Clone對比分析

    這篇文章主要介紹了Rust中的Copy和Clone及區(qū)別對比分析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • Rust 文檔注釋功能示例代碼

    Rust 文檔注釋功能示例代碼

    Rust的文檔注釋使用特定的格式,以便通過 rustdoc工具生成 API 文檔,本文給大家介紹Rust 文檔注釋功能,感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • Rust 原始指針功能探索

    Rust 原始指針功能探索

    這篇文章主要為大家介紹了Rust 原始指針功能探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Rust指南枚舉類與模式匹配詳解

    Rust指南枚舉類與模式匹配詳解

    這篇文章主要介紹了Rust指南枚舉類與模式匹配精講,枚舉允許我們列舉所有可能的值來定義一個類型,枚舉中的值也叫變體,今天通過一個例子給大家詳細(xì)講解,需要的朋友可以參考下
    2022-09-09
  • rust使用Atomic創(chuàng)建全局變量和使用操作方法

    rust使用Atomic創(chuàng)建全局變量和使用操作方法

    從 Rust1.34 版本后,就正式支持原子類型,原子指的是一系列不可被 CPU 上下文交換的機(jī)器指令,這些指令組合在一起就形成了原子操作,這篇文章主要介紹了rust使用Atomic創(chuàng)建全局變量和使用,需要的朋友可以參考下
    2024-05-05

最新評論