sqlx执行案例

SQLx简介

SQLx是Rust语言中的一个异步SQL数据库连接库,它支持多种数据库,如PostgreSQL、MySQL和SQLite。SQLx提供了简单的API和异步执行查询的能力,使得Rust程序员可以轻松地与数据库交互1。

本章节以PostgreSQL为例。

目录结构

cargo.toml配置文件

[package]
name = "rust_model"
version = "0.1.0"
edition = "2021"[dependencies]
tokio = {version = "1.37.0",features = ["full"]}
sqlx = { version = "0.7.4",features = ["postgres", "runtime-tokio-rustls","macros","chrono"]}
dotenv = {version = "0.15.0"}
chrono={version = "0.4.38", features = ["serde"]}
serde={version = "1.0.200", features = ["derive"]}
actix-web = "4.0.4"
actix-rt = "2.9.0"[[example]]
name = "rustSQLx"
path = "examples/SQL/rustSQLx.rs"
doc-scrape-examples = true[package.metadata.example.rustSQLx]
name = "Create SQL Database"
description = "demonstrates SQLx database create"
category = "SQL Rendering"
wasm = true

.env环境变量配置文件

DATABASE_URL=postgres://postgres:123456@127.0.0.1:5432/library

假设已有数据库library,创建表
 

DROP TABLE IF EXISTS course;
CREATE TABLE course (id INT8 NOT NULL,teacher_id INT4 NOT NULL,name VARCHAR(255) NOT NULL,time DATE DEFAULT NOW()
);
INSERT INTO course VALUES (1, 11, 'cml', '2022-03-25');
INSERT INTO course VALUES (2, 22, 'cc', '2022-03-25');
INSERT INTO course VALUES (3, 33, 'mm', '2022-03-25');
ALTER TABLE course ADD CONSTRAINT course_pkey PRIMARY KEY (id);

rustSQLx.rs执行文件

use chrono::NaiveDate;
use dotenv::dotenv;
use sqlx::postgres::PgPoolOptions;
use std::env;
use rand::Rng;#[derive(Debug)]
pub struct Course {pub id: i64,pub teacher_id: i32,pub name: String,pub time: Option<NaiveDate>,
}#[actix_rt::main]
async fn main() -> Result<(), sqlx::Error> {dotenv().ok();// 读取所有的环境变量// for (key, value) in env::vars() {//     println!("环境变量内容:{}: {}", key, value);// }let connection_str = env::var("DATABASE_URL").expect("数据库连接字符串获取失败,请检查env文件是否已配置数据库连接字符串");// println!("数据库连接字符串是:{}", connection_str);let pool = PgPoolOptions::new().max_connections(5).connect(&connection_str).await?;println!("db_pool is : {:?}", pool);//查询所有let list = sqlx::query!("select * from course").fetch_all(&pool).await?;let mut vec = vec![];for row in list {vec.push(Course {id: row.id,teacher_id: row.teacher_id,name: row.name,time: row.time,})}println!("数据库中的所有数据:{:#?}", vec);//查询单个let list2 = sqlx::query!(r#"select * from course where id = $1"#, 1).fetch_all(&pool).await?;let mut vec2 = vec![];for row in list2 {vec2.push(Course {id: row.id,teacher_id: row.teacher_id,name: row.name,time: row.time,})}println!("查询单个{:#?}", vec2);let mut rng = rand::thread_rng();println!("Random i32: {}", rng.gen::<i32>());let upc = Course{id: rng.gen::<i64>(),teacher_id: rng.gen::<i32>(),name: "YinThunder".to_string(),time: None,};// 增加let insert = sqlx::query!(r#"INSERT INTO course VALUES ($1, $2, $3)"#,upc.id as i32,upc.teacher_id,upc.name).fetch_all(&pool).await?;// 更新let update = sqlx::query!(r#"UPDATE course SET name=$1 WHERE id = $2"#, "Amy",1).fetch_all(&pool).await?;//删除let delete = sqlx::query!(r#"DELETE FROM course WHERE id = $1"#, 2).fetch_all(&pool).await?;Ok(())
}

命令行执行

cargo run --example rustSQLx

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

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

相关文章

Linux 基础IO篇

1. C语言中的文件操作 1 #include<stdio.h>2 3 int main()4 {5 FILE* pf fopen("log.txt", "w");6 if(NULL pf)7 {8 perror("fopen");9 return 1; 10 }11 fprintf(pf, &quo…

Adobe系列软件安装

双击解压 先运行Creative_Cloud_Set_Up.exe。 完毕后&#xff0c;运行AdobeGenP.exe 先Path&#xff0c;选路径&#xff0c;如 C:\Program Files\Adobe 后Search 最后Patch。 关闭软件&#xff0c;修图&#xff01;

【2024最新华为OD-C卷试题汇总】URL拼接 (100分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; 文章目录 前…

Redis高级(Redis持久化,Redis主从模式,Redis哨兵模式,Redis分片集群)

目录 一、单机Redis 1. 问题说明 2. 安装Redis 1 解压安装Redis【备用】 2 配置Redis 3 启动Redis 3. 小结 二、Redis持久化 1. 持久化机制介绍 2. RDB模式 3. AOF模式 4. RDB和AOF对比 5. 小结 三、Redis主从模式 1. 介绍 2. 搭建Redis主从架构【备用】 3. 主…

Spring Boot | Spring Boot 消息管理 ( 消息中间件 ) 、RabbitMQ“消息中间件“

目录: 一、"消息服务" 概述 :1.1 为什么要使用 "消息服务" ( 消息中间件 ) &#xff1f;① 异步处理② 应用解耦③ 流量削峰④ 分布式事务管理 1.2 常用 "消息中间件" 介绍 :ActiveMQ ( 广泛应用于中小型企业 )RabbitMQ ( 没有特别要求的场景下…

JS hook cookie

JS hook cookie cookie 的值是V&#xff0c;v是动态变化的 可以看到D中生成了cookie的值n 尝试使用RPC定位到cookie。 替换内容&#xff0c;下断点。 将写好的RPC代码直接插入 加入代码&#xff0c;file.virjar.com/sekiro_web_client.js?_123 这个地址是在前端创建客户端…

PCB光控打孔机第二版程序(一)

/*PCB机程序 XY同时启动 L9751 CODE61068 2018 6 19 08:00 固定位置释放吸盘*/ /*修正寻点第十二条结束调用计算坐标L5091&#xff0c;自动运行Y计算L6280 6281***/ /*** 开外部中断2关闭定时器2XY轴输出信号&#xff0c;自动运行循环检测外部中断高电平重启XY轴输出信号 增加寻…

5:OOP面向对象编程 VS GP 泛型编程

文章目录 两种概念的差别OOP 想要将datas 和methods放在一起GP 想要将datas 和methods分开来 GP的好处sort方法 两种概念的差别 OOP 面向对象 —大量的继承关系和 虚函数 比较复杂 GP–stl的使用 使用模版编程 不用继承和大量虚函数需要理清楚关系 OOP 想要将datas 和methods…

抖音爆火的QQ价格评估前端源码

最近抖音很火直播给别人测qq价值多少&#xff0c;这个源码只有前端&#xff0c; 包含激活码验证页&#xff0c;评估页 源码免费下载地址抄笔记 (chaobiji.cn)

数据结构(C):玩转顺序表

&#x1f37a;0.前言 &#x1f3b7;1.线性表 &#x1f3b8;2.顺序表 &#x1f4c0;动态顺序表的实现 &#x1f4bf;初始化 &#x1f4bf;检查容量是否满了&#xff0c;进行扩容 &#x1f4bf;插入&#xff1a;头插和尾插 &#x1f4bf;删除&#xff1a;头删和尾删 &…

基于PSO优化的PV光伏发电系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于PSO优化的PV光伏发电系统simulink建模与仿真。其中PSO采用matlab编程实现&#xff0c;通过simulink的函数嵌入模块&#xff0c;将matlab调用进simulink中。 2.系统仿真结…

【强训笔记】day10

NO.1 思路&#xff1a;中心扩展。从i位置开始&#xff0c;从i-1为左边和i1右边进行移动&#xff0c;字符相等就继续移动&#xff0c;直到不等&#xff0c;更新回文串长度&#xff0c;让i为左边&#xff0c;i1右边再移动&#xff0c;同样字符相等就移动&#xff0c;不等就更新长…