rust操作pgsql、mysql和sqlite

rust中,有很多技术可以操作pgsql、mysql和sqlite,以sqlx为主流技术。我们以sqlx操作sqlite为示例,操作pgsql和mysql的办法是一样的。

复制代码
Cargo.toml:
rust 复制代码
[package]
name = "test"
version = "0.1.0"
edition = "2021"

[dependencies]
serde = { version = "1", features = ["derive"] }
serde_json = "1"
sqlx = {  version ="0.8.3", features = [ "runtime-tokio", "tls-rustls-ring", "mysql","postgres","sqlite", "time", "uuid", "chrono" ] }
axum = {   version ="0.7.7", features = ["multipart"] }
tokio = { version = "1.0", features = ["full"] }
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
tracing-appender = "0.2"
futures = "0.3.31"
tower-http =  { version ="0.6.1", features = ["cors", "fs", "compression-gzip"] }
chrono = { version = "0.4", features = ["serde"] }
tokio-util = { version = "0.7", features = ["io","compat"] }
 tower="0.5.1"
 thiserror = "1.0"
复制代码
main.rs:
rust 复制代码
use crate::entity::*;
use axum::routing::post;
use axum::{
    extract::Extension, http::StatusCode, response::IntoResponse, routing::get, Json, Router,
};
use axum::{
    extract::State,
    extract::{Path, Query},
};
use axum::{
    extract::{FromRef, FromRequestParts},
    http::request::Parts,
};
use serde::{Deserialize, Serialize};
use std::{env, option};
use thiserror::Error;
use tokio_stream::StreamExt; // 用于处理异步流
mod entity;
use axum::extract::DefaultBodyLimit;
use axum::extract::Query as axumQuery;
use sqlx::encode::IsNull;
use sqlx::mysql::{MySqlPool, MySqlPoolOptions};
use sqlx::postgres::{PgPool, PgPoolOptions};
use sqlx::sqlite::SqlitePoolOptions;
use sqlx::sqlite::{SqliteOperation, SqlitePool};
use sqlx::{mysql::MySqlQueryResult, mysql::MySqlRow, postgres::PgQueryResult, postgres::PgRow, Sqlite};
use sqlx::{sqlite::SqliteQueryResult, sqlite::SqliteRow, Column, FromRow, Row, TypeInfo};
use std::collections::HashMap;
use std::error::Error;
use std::path::Path as stdPath;
use std::path::PathBuf;
use std::process::Stdio;
use std::sync::atomic::{AtomicUsize, Ordering};
use tokio::net::TcpStream;
use tokio::process::Command; // 使用 tokio 的异步 Command
use tokio::task;
use tokio_util::compat::TokioAsyncWriteCompatExt;
use tower_http::cors::{Any as OtherAny, CorsLayer};
use tracing::{debug, info, warn};
use tracing_appender::rolling;
use tracing_subscriber::fmt::writer::MakeWriterExt;
use oracle::sql_type;
use libloading::{Library, Symbol};
use std::ffi::{CStr, CString};
use std::os::raw::c_char;
use std::os::raw::c_int;
use sysinfo::{System};
use std::fs::{File, OpenOptions};
use std::io::{Read, Write};
use std::sync::Arc;
use once_cell::sync::Lazy;
use std::sync::Mutex;
#[tokio::main]
async fn main() {
//创建连接
 let database_url = "sqlite::memory:";
    let sqliteconnection = SqlitePoolOptions::new()
        .max_connections(5)
        .connect(&database_url)
        .await
        .expect("数据库连接失败");
 let create_table_1 = "CREATE TABLE test(c1 TEXT   COLLATE NOCASE , c2 TEXT   COLLATE NOCASE );";
//执行sql语句
    sqlx::query(create_table_1)
        .execute(&sqliteconnection )
        .await
        .expect("创建表失败");
}

代码来源为hpctb真实代码的简化。

相关推荐
这个DBA有点耶5 小时前
2026年分布式数据库有哪些主流选择?先评估这5个维度再决定
数据库·分布式·dba
这个DBA有点耶8 小时前
从MySQL 5.7到8.0:JSON查询性能差在哪?虚拟列索引vs多值索引怎么选
数据库·mysql·架构
胡写代码8 小时前
数据库审计字段,别再每张表各写一套了——我统一成这 6 个字段
数据库
SelectDB12 小时前
为什么 JSON 正在成为分析数据库新的竞争点?
数据库·json·agent
ClouGence13 小时前
开源数据库管理工具 CloudDM 4.2.0 发布,新增 GoldenDB、KingbaseES 等数据源
数据库·dba·devops
发霉的馒头13 小时前
ORA-00845: MEMORY_TARGET not supported on this system的解决方法
数据库
草莓熊Lotso15 小时前
【Redis 初阶】Set 类型深度解析:去重集合的运算能力与实战场景
linux·网络·数据库·windows·redis·tcp/ip·缓存
煎饼皮皮侠17 小时前
【设计】设计一个web版的数据库管理平台后端(之五) --借鉴mybatis
数据库·mybatis
东风破_1 天前
danci 2:创建的单词书到底存在哪里?从 Supabase 一路理解 ORM、Drizzle 和 RLS
数据库·后端·node.js
九皇叔叔1 天前
《MySQL 体系架构详解:Server 层、SQL 执行流程与 InnoDB、MyISAM、MEMORY 存储引擎》
sql·mysql·架构