Rust Postgres实例

Rust Postgres介绍

Rust Postgres是一个纯Rust实现的PostgreSQL客户端库,无需依赖任何外部二进制文件2。这意味着它可以轻松集成到你的Rust项目中,提供对PostgreSQL的支持。

特点

  • 高性能:Rust Postgres提供了高性能的数据库交互功能,这对于需要处理大量数据的应用来说是非常重要的。
  • 安全性:由于Rust本身的设计就注重安全性,因此Rust Postgres也继承了这一特性,能够在编译期间检测并预防大部分潜在的安全问题。
  • 易用性:Rust Postgres的API设计简洁明了,易于理解和使用,这使得开发者能够快速上手并开始使用。

目录结构

cargo.toml配置文件

[package]
name = "MyPostgres"
version = "0.1.0"
edition = "2021"

[dependencies]
postgres = "0.19.7"

[[example]]
name = "createPostgresDatabase"
path = "examples/SQL/createPostgresDatabase.rs"
doc-scrape-examples = true

[package.metadata.example.createPostgresDatabase]
name = "Create Postgres Database"
description = "demonstrates postgreSQL database create"
category = "SQL Rendering"
wasm = true

假设已有数据库library,初始数据库,可在官方下载软件,按照过程设置密码,本实例中是123456。

postgreSQL不允许管理员登录命令行,可以在路径.\PostgreSQL\16\pgAdmin 4\runtime找到pgAdmin4.exe打开可视化界面。

PostgreSQL: Windows installers

执行文件createPostgresDatabase.rs

增删改查

use postgres::{Client, NoTls, Error};
use std::collections::HashMap;
use std::rc::Rc;
use std::cell::RefCell;
struct Author {
    _id: i32,
    name: String,
    country: String
}

struct Nation {
    nationality: String,
    count: i64,
}
fn establish_client() -> Client {

    Client::connect
        ("postgresql://postgres:123456@localhost/library", NoTls).expect("REASON")

}
fn main() -> Result<(), Error> {
    // let mut client =
    //     Client::connect("postgresql://postgres:123456@localhost/library", NoTls)?;

    let  client =Rc::new(RefCell::new(establish_client()));

    client.clone().borrow_mut().batch_execute("
        CREATE TABLE IF NOT EXISTS author (
            id              SERIAL PRIMARY KEY,
            name            VARCHAR NOT NULL,
            country         VARCHAR NOT NULL
            )
    ")?;

    client.clone().borrow_mut().batch_execute("
        CREATE TABLE IF NOT EXISTS book  (
            id              SERIAL PRIMARY KEY,
            title           VARCHAR NOT NULL,
            author_id       INTEGER NOT NULL REFERENCES author
            )
    ")?;


    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.clone().borrow_mut().execute(
            "INSERT INTO author (name, country) VALUES ($1, $2)",
            &[&author.name, &author.country],
        )?;
    }

    for row in  client.clone().borrow_mut().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);
    }

    client.clone().borrow_mut().execute("DROP TABLE book",&[]);
    // let result =
    //      client.clone().borrow_mut().execute
    //     ("DELETE FROM author WHERE id >= $1 AND id <= $2", &[&1i32, &100i32])?;
    //
    // println!("{:?}",result);
    let a2 = Author {
        _id: 0,
        name: "YinThunder".to_string(),
        country: "1".to_string()
    };
    let result =
        client.clone().borrow_mut().execute
        ("UPDATE  author SET name = $1 WHERE id >= $2 AND id <= $3", &[&a2.name,&1i32, &100i32])?;

    println!("{:?}",result);


    selectDataTable(client.clone());
    droptDataTable(client.clone());

    Ok(())

}
fn selectDataTable(client: Rc<RefCell<Client>>) ->Result<(), Error>{
    for row in client.borrow_mut().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(())
}
fn droptDataTable(client: Rc<RefCell<Client>>) ->Result<(), Error>{
    client.borrow_mut().execute("DROP TABLE author",&[]);
    Ok(())
}

命令行执行指令

cargo run --example createPostgresDatabase
相关推荐
懒大王爱吃狼1 小时前
Python教程:python枚举类定义和使用
开发语言·前端·javascript·python·python基础·python编程·python书籍
秃头佛爷2 小时前
Python学习大纲总结及注意事项
开发语言·python·学习
待磨的钝刨2 小时前
【格式化查看JSON文件】coco的json文件内容都在一行如何按照json格式查看
开发语言·javascript·json
XiaoLeisj4 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
paopaokaka_luck4 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
励志成为嵌入式工程师5 小时前
c语言简单编程练习9
c语言·开发语言·算法·vim
捕鲸叉5 小时前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer5 小时前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法
码农小旋风5 小时前
详解K8S--声明式API
后端
Peter_chq5 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端