最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

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

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

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

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

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

Client::connect() 函數(shù)的第二個(gè)參數(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)建一個(gè)查詢數(shù)據(jù)的函數(shù):

這里,我們直接對(duì) Client 的 query 方法返回的結(jié)果進(jìn)行遍歷,最后方法返回一個(gè) 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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • 使用Rust采集天氣預(yù)報(bào)信息并實(shí)現(xiàn)實(shí)時(shí)更新數(shù)據(jù)功能

    使用Rust采集天氣預(yù)報(bào)信息并實(shí)現(xiàn)實(shí)時(shí)更新數(shù)據(jù)功能

    Rust作為一種高效、安全的編程語言,可以用于開發(fā)各種應(yīng)用,包括天氣預(yù)報(bào)采集系統(tǒng),本文將探討如何使用Rust來采集天氣預(yù)報(bào)信息,并實(shí)現(xiàn)實(shí)時(shí)更新數(shù)據(jù)的功能,文中通過代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • Rust 中的 Packages 與 Crates模塊化構(gòu)建的基礎(chǔ)及開發(fā)流程

    Rust 中的 Packages 與 Crates模塊化構(gòu)建的基礎(chǔ)及開發(fā)流程

    Rust中的Crate是編譯器處理的最小代碼單元,可以是二進(jìn)制或庫,每個(gè)Crate由一個(gè)CrateRoot文件(通常是src/main.rs或src/lib.rs)定義,本文給大家介紹Rust 中的 Packages 與 Crates模塊化構(gòu)建的基礎(chǔ)及開發(fā)流程,感興趣的朋友一起看看吧
    2025-02-02
  • 如何使用Rust的向量存儲(chǔ)值列表

    如何使用Rust的向量存儲(chǔ)值列表

    本文介紹了在Rust中使用向量存儲(chǔ)值列表的方法,包括創(chuàng)建、更新、讀取、遍歷、存儲(chǔ)多種類型以及內(nèi)存釋放等方面,向量是Rust中常用且強(qiáng)大的集合類型,熟練掌握其用法有助于編寫高效且安全的代碼
    2025-02-02
  • 探索Rust切片與Go有何區(qū)別

    探索Rust切片與Go有何區(qū)別

    這篇文章主要為大家介紹了Rust切片與Go的區(qū)別探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • 從迷你todo?命令行入門Rust示例詳解

    從迷你todo?命令行入門Rust示例詳解

    這篇文章主要為大家介紹了從一個(gè)迷你todo命令行入門Rust的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Rust中的Option枚舉快速入門教程

    Rust中的Option枚舉快速入門教程

    Rust中的Option枚舉用于表示可能不存在的值,提供了多種方法來處理這些值,避免了空指針異常,文章介紹了Option的定義、常見方法、使用場景以及注意事項(xiàng),感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • 如何在Rust中處理命令行參數(shù)和環(huán)境變量

    如何在Rust中處理命令行參數(shù)和環(huán)境變量

    在本章節(jié)中, 我們探討了Rust處理命令行參數(shù)的常見的兩種方式和處理環(huán)境變量的兩種常見方式,感興趣的朋友一起看看吧
    2023-12-12
  • 詳解rust?自動(dòng)化測試、迭代器與閉包、智能指針、無畏并發(fā)

    詳解rust?自動(dòng)化測試、迭代器與閉包、智能指針、無畏并發(fā)

    這篇文章主要介紹了rust?自動(dòng)化測試、迭代器與閉包、智能指針、無畏并發(fā),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-11-11
  • rust聲明式宏的實(shí)現(xiàn)

    rust聲明式宏的實(shí)現(xiàn)

    聲明式宏使得你能夠?qū)懗鲱愃?match?表達(dá)式的東西,來操作你所提供的?Rust代碼,它使用你提供的代碼來生成用于替換宏調(diào)用的代碼,感興趣的可以了解一下
    2023-12-12
  • Rust之智能指針的用法

    Rust之智能指針的用法

    在Rust中,智能指針是管理內(nèi)存所有權(quán)和生命周期的核心工具,本文主要介紹了Rust之智能指針的用法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03

最新評(píng)論

咸宁市| 南投县| 台北县| 井研县| 塘沽区| 双鸭山市| 奇台县| 开封市| 康定县| 佛冈县| 赤城县| 井陉县| 安图县| 昌乐县| 铁力市| 庄河市| 德清县| 搜索| 富民县| 平舆县| 宜兴市| 兴义市| 麻城市| 崇礼县| 扎兰屯市| 柞水县| 鄢陵县| 新源县| 峨山| 抚松县| 盘锦市| 文安县| 克东县| 曲阳县| 毕节市| 双辽市| 五家渠市| 甘德县| 玛沁县| 理塘县| 衡东县|