rust连接postgresql数据库

同步操作

引入crate:

postgres = "0.19.7"
use postgres::{Client, NoTls, error::Error};fn main() -> Result<(), Error> {let mut client = Client::connect("host=localhost port=5432 dbname=xxxxxdb user=postgres password=123456", NoTls).unwrap();for row in client.query("select id,name,file_name,create_time::TEXT,valid from xxxxx", &[])?{let id: i32 = row.get("id");let name: &str = row.get("name");let file_name: &str = row.get("file_name");let create_time: &str = row.get(3);let valid: bool = row.get(4);println!("id:{}, name:{}, file_name:{},create_time:{:?} valid:{}", id, name, file_name,create_time, valid);}let rows = client.query("select count(*)::integer as a from xxxxx where id=$1", &[&1])?;let cnt: i32 = rows[0].get("a");println!("cnt={}", cnt);Ok(())
}

注意:用户名不要使用root。否则报错:

thread 'main' panicked at src\main.rs:5:115:
called `Result::unwrap()` on an `Err` value: Error { kind: Parse, cause: Some(Custom { kind: InvalidInput, error: Utf8Error { valid_up_to: 0, error_len: Some(1) } }) }

注意:select count(*) ::integer as a from xxxx的写法,做postgres内的类型转换,否则count(*)默认作为i8返回,rust获取数据时报错。

异步操作

引入Crate:

tokio = {version = "1.35.1", features = ["full"]}
tokio-postgres = "0.7.10"
chrono = "0.4.34"
use tokio_postgres::{NoTls, Error};
use chrono::prelude::{DateTime, Utc};
use std::time::SystemTime;#[tokio::main]
async fn main() -> Result<(), Error> {println!("测试tokio异步版本postgres操作");let (client, connection) = tokio_postgres::connect("host=localhost port=5432 dbname=xxxxxdb user=postgres password=123456", NoTls).await.unwrap();//启动线程监控数据库连接是否正常tokio::spawn(async move {if let Err(e) = connection.await{eprintln!("connection error:{}", e);}});let rows = client.query("select id,name,file_name,create_time,valid from xxxxx", &[]).await?;for row in rows{let id: i32 = row.get("id");let name: &str = row.get("name");let file_name: String = row.get("file_name");let create_time: SystemTime = row.get("create_time");let dt: DateTime<Utc> = create_time.clone().into();println!("id={}, name={}, file_name={}, create_time={}", id, name, file_name, dt.format("%Y-%M-%d %H:%m:%S"));}let rows = client.query("select max(id)::integer from xxxxx", &[]).await?;let max_id:i32 = rows[0].get(0);println!("max id={}", max_id);let new_id = max_id + 1;let new_name: String = format!("xxxxx-{}", new_id);let new_file_name: String = format!("xxxxx_file_name-{}", new_id);let modify_row_cnt = client.execute("insert into xxxxx(id,name,file_name,create_time,valid) values($1,$2,$3,$4,$5)", &[&new_id, &new_name, &new_file_name, &SystemTime::now(), &true]).await?;println!("affect row count:{}", modify_row_cnt);let affect_row_count = client.execute("update xxxxx set file_name='xxxxx_file_name-' || id::TEXT where file_name=''", &[]).await?;println!("affect row count:{}", affect_row_count);let affect_row_count = client.execute("delete from xxxxx where id=$1", &[&new_id]).await?;println!("delete row count:{}", affect_row_count);let trans = client.transaction().await?;trans.execute("update xxxxx set valid=$1,remark=name || id::TEXT where id=$2", &[&false, &1]).await?;trans.execute("update xxxxx set valid=$1,remark=name || id::TEXT where id=$2", &[&true, &2]).await?;trans.commit().await?;Ok(())
}

注意:postgresql中的timestamp类型可以直接转换为rust中的SystemTime;要转换为我们熟悉的年月日时分秒格式,还需要借助chrono crate。

代码中含增、删、改、查、事务范例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/708860.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优化全球应用交付,详解GLSB是什么?

伴随着互联网的快速发展&#xff0c;网站的流量请求甚至能达到上千亿&#xff0c;越来越多的用户不满足于在单一数据中心提供服务&#xff0c;开始考虑容灾、用户就近访问以及全球应用交付等问题。在这样的需求下&#xff0c;全局服务器负载均衡技术&#xff08;GSLB&#xff0…

Linux笔记--基本操作指令

一、查看日期与日历 1.date指令 显示日期 #用法1:dateCST: China Standard Time时区&#xff0c;中国标准时间 #用法2: date 指定格式 [常用格式]: "%Y-%m-%d"(%F): 2022-07-25 "%H:%M:%S"(%T): 14:53:44 "%F %T" #用法3: date -d "-1 da…

Python电能质量扰动信号分类(六)基于扰动信号特征提取的超强机器学习识别模型

目录 往期精彩内容&#xff1a; 前言 1 数据集和特征提取 1.1 数据集导入 1.2 扰动信号特征提取 2超强模型XGBoost——原理介绍 2.1 原理介绍 2.2 特征数据集制作 3 模型评估和对比 3.1 随机森林分类模型 3.2 支持向量机SVM分类模型 3.3 XGBoost分类模型 代码、数据…

智慧应急与物联网相结合:物联网技术如何提升智慧应急响应能力

目录 一、引言 二、智慧应急与物联网技术的结合 三、物联网技术提升智慧应急响应能力的途径 四、物联网技术在智慧应急中的应用案例 五、物联网技术在智慧应急中面临的挑战与解决方案 挑战一&#xff1a;技术标准与规范不统一 解决方案&#xff1a; 挑战二&#xff1a;…

工业锅炉物联网:HiWoo Cloud为工业能源转型注入新动力

随着全球工业化的快速发展&#xff0c;工业锅炉作为工业生产的“心脏”&#xff0c;其能源效率和运行安全性越来越受到关注。然而&#xff0c;传统的工业锅炉管理往往依赖于人工监控和定期维护&#xff0c;这种方式不仅效率低下&#xff0c;而且难以确保设备的持续高效运行。在…

Matlab如何批量读取txt数据?科研效率UpUp第1期

最近帮几个亲朋好友整理博士毕业论文。 期间&#xff0c;我观察了他们的行为模式&#xff0c;发现其将大量的时间&#xff0c;不同程度地浪费在一些机械、重复性劳动上&#xff0c;导致效率低下。 博士尚且如此&#xff0c;想必还有很多人也深受其扰。 作为一个专业摸鱼人&a…

分享:大数据信用报告查询的价格一般要多少钱?

现在很多人都开始了解自己的大数据信用了&#xff0c;纷纷去查大数据信用报告&#xff0c;由于大数据信用与人行征信有本质的区别&#xff0c;查询方式和价格都不是固定的&#xff0c;本文就为大家详细讲讲大数据信用报告查询的价格一般要多少钱&#xff0c;希望对你有帮助。 大…

MySql-索引失效的情况

1.模糊查询时%在开头 当使用模糊查询&#xff08;如使用 LIKE %keyword%&#xff09;时&#xff0c;如果通配符 % 出现在搜索关键字的开头&#xff0c;那么索引将无法被有效利用&#xff0c;从而导致索引失效。 当通配符出现在搜索关键字的开头时&#xff0c;索引失效的主要原…

如何用golang写一个自己的后端框架

如果你想要不使用任何现有的后端框架,完全从头开始创建一个后端框架,你需要实现Web服务器的基本组件,比如路由器、请求处理、中间件支持等。以下是一个简单的指南,用于创建一个基本的、不使用任何外部框架的Go后端框架。 步骤 1: 设置工作环境 确保你已经安装了Go语言环境…

vue3 实现一个简单的输入框

需求背景 需要一个输入框&#xff0c;可以输入文字&#xff0c;添加表情&#xff0c;一开始用了富文本编辑器&#xff0c;有点大材小用&#xff0c;所以自己封装一个输入框组件。支持输入文字&#xff0c;选择表情/插入表情&#xff0c;支持组合键换行&#xff0c;使用enter 进…

模块化学习

CommonJS 全局变量污染依赖混乱 模块化的标准&#xff1a; CommonJS CMJ 社区标准 node环境ES Module ESM 官方标准 CMJ规范&#xff1a; 所有的 js 文件都是一个模块 运行的模块 入口模块所有的模块中的全局变量、函数&#xff0c;均不会产生污染当一个模块需要提供一些东西给…

Python Web详细教程

Python Web开发的详细教程可以分为以下几个步骤&#xff1a; 1. 环境搭建 安装Python&#xff1a;确保你的系统上安装了Python。你可以从Python官网下载并安装最新版本的Python。 安装虚拟环境&#xff1a;为了隔离项目依赖&#xff0c;建议使用虚拟环境。你可以使用venv模块创…

DPU:未来计算的三大支柱之一

随着计算领域的不断发展&#xff0c;数据处理单元&#xff08;DPU&#xff09;的出现正在重塑数据中心和计算架构的未来。在本文中&#xff0c;我们深入探讨了DPU在该领域的重要性和作用&#xff0c;并将其与传统的中央处理器&#xff08;CPU&#xff09;和图形处理单元&#x…

2024年小程序云开发CMS内容管理无法使用,无法同步内容模型到云开发数据库的解决方案,回退老版本CMS内容管理的最新方法

一&#xff0c;问题描述 最近越来越多的同学找石头哥&#xff0c;说cms用不了&#xff0c;其实是小程序官方最近又搞大动作了&#xff0c;偷偷的升级的云开发cms&#xff08;内容管理&#xff09;以下都称cms&#xff0c;不升级不要紧&#xff0c;这一升级&#xff0c;就导致我…

亚马逊云科技实时 AI 编程助手 Amazon CodeWhisperer,开发快人一步

​ 亚马逊云科技&#xff1a;https://mic.anruicloud.com/url/1024 ​ Amazon CodeWhisperer 是一款 AI 编码配套应用程序&#xff0c;可在 IDE 中生成 整行代码和完整的函数代码建议&#xff0c;以帮助您更快地完成更多工作。在本系列 文章中&#xff0c;我们将为您详细介绍 A…

学习阶段单片机买esp32还是stm32?

学习阶段单片机买esp32还是stm32? 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「stm32的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xf…

5G时代对于工业化场景应用有什么改善

5G 不仅仅是 4G 的技术升级&#xff0c;而是将平板电脑和智能手机的技术升级。除了更好的高清视频流和其他高带宽应用&#xff0c;消费者不会注意到很多性能差异。然而&#xff0c;在工业领域&#xff0c;5G 代表着巨大的飞跃。 在工厂和厂房内&#xff0c; 设备的Wi-Fi 网络经…

el-table实现转置表格

vue版本&#xff1a;vue2.6.10 elementui版本&#xff1a;2.15.14 实现效果&#xff1a;el-table实现行列互换 代码&#xff1a; <template><div class"app-container"><span>原始数据</span><el-table:data"datas"border>…

JAVA的方法

学习过C语言&#xff0c;我们可以知道&#xff0c;C语言是由各种各样的函数构成的&#xff0c;程序的入口是主函数&#xff0c;程序结束也是从主函数的最后一行代码结束的&#xff08;默认主函数中间没有return&#xff09;。JAVA是在C上编写的&#xff0c;而C是在C语言之上编写…

Groovy(第四节) Groovy 之循环

目录 循环 深入方法 Groovy 中的范围 设置范围 默认参数值