#async-orm #postgresql #sqlite #mssql #mysql #orm #sql-database

welds-connections

支持(postgres, mssql, mysql, sqlite)的异步ORM

10个版本

0.4.0 2024年8月12日
0.3.7 2024年7月19日
0.3.5 2024年5月1日
0.3.4 2024年4月4日
0.3.1 2024年3月11日

#1202 in 数据库接口

Download history 98/week @ 2024-04-24 162/week @ 2024-05-01 2/week @ 2024-05-08 10/week @ 2024-05-15 32/week @ 2024-05-22 42/week @ 2024-05-29 27/week @ 2024-06-05 47/week @ 2024-06-12 34/week @ 2024-06-19 15/week @ 2024-06-26 9/week @ 2024-07-03 30/week @ 2024-07-10 271/week @ 2024-07-17 115/week @ 2024-07-24 45/week @ 2024-07-31 94/week @ 2024-08-07

每月536次下载
2个crate中使用(通过welds

BSD-3-Clause

89KB
2.5K SLoC

使用sqlx和tiberius编写的异步ORM

Welds Connections

这是welds用于所有数据库的通用接口。

它允许您以简单通用的方式通过特性与sqlx和tiberius通信。

特性

  • 所有操作都是异步的。
  • 连接池化。
  • 所有操作都支持事务。(看tiberius)
  • 支持多种SQL数据库(Mssql, MySql, Postgres, Sqlite)
  • 为了便于开发而编写。简单接口

简单接口

/// The common trait for database connections and transactions.
pub trait Client {
    /// Execute a sql command. returns the number of rows that were affected
    async fn execute(&self, sql: &str, params: &[&(dyn Param + Sync)]) -> Result<ExecuteResult>;

    /// Runs SQL and returns a collection of rows from the database.
    async fn fetch_rows(&self, sql: &str, params: &[&(dyn Param + Sync)]) -> Result<Vec<Row>>;

    /// Run several `fetch_rows` command on the same connection in the connection pool
    async fn fetch_many(&self, args: &[Fetch]) -> Result<Vec<Vec<Row>>>;

    // Returns what syntax (dialect) of SQL the backend is expecting
    fn syntax(&self) -> Syntax;
}

就是这样。

这就是这个crate的全部。

您将获得这些

  • MySql及其事务
  • Postgres及其事务
  • Sqlite及其事务
  • Mssql及其事务

事务

您可以通过TransactStart特性获取事务。


use welds_connections::{Client, TransactStart};
#[tokio::main]
async fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
    let url = "sqlite://./test.sqlite";
    let client = welds_connections::sqlite::get_conn(url).await?;
    let transaction = client.begin().await?;
    transaction.rollback.await?;
}

示例


use welds_connections::{Client, TransactStart};

#[tokio::main]
async fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {

    let url = "sqlite://./test.sqlite";
    let client = welds_connections::sqlite::get_conn(url).await?;

    let sql = "SELECT name from people where name like ?";
    let filter = "James%".to_string();
    let rows = client.fetch_rows(sql, &[&filter]).await?;

    for row in rows {
        let name: String = row.get("name").unwrap();
        println!("ROW: {:?}", &name);
    }
}

依赖项

~0.3–17MB
~239K SLoC