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 数据库接口
每月536次下载
在2个crate中使用(通过welds)
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