94个版本 (19个破坏性更新)

0.20.1 2024年8月9日
0.19.5 2024年7月23日
0.16.0 2024年3月25日
0.12.1 2023年12月26日
0.1.3 2023年3月30日

#694数据库接口

Download history 2126/week @ 2024-04-22 905/week @ 2024-04-29 3041/week @ 2024-05-06 2730/week @ 2024-05-13 2498/week @ 2024-05-20 2052/week @ 2024-05-27 2146/week @ 2024-06-03 1683/week @ 2024-06-10 1584/week @ 2024-06-17 2188/week @ 2024-06-24 759/week @ 2024-07-01 187/week @ 2024-07-08 567/week @ 2024-07-15 407/week @ 2024-07-22 239/week @ 2024-07-29 142/week @ 2024-08-05

每月 1,411 次下载
用于 3 个crate

Apache-2.0

205KB
4.5K SLoC

dataBend驱动

dataBend统一的RestAPI和FlightSQL SQL客户端

crates.io License

用法

exec

use databend_driver::Client;

let dsn = "databend://root:@localhost:8000/default?sslmode=disable".to_string();
let client = Client::new(dsn);
let conn = client.get_conn().await.unwrap();

let sql_create = "CREATE TABLE books (
    title VARCHAR,
    author VARCHAR,
    date Date
);";
conn.exec(sql_create).await.unwrap();
let sql_insert = "INSERT INTO books VALUES ('The Little Prince', 'Antoine de Saint-Exupéry', '1943-04-06');";
conn.exec(sql_insert).await.unwrap();

查询行

let row = conn.query_row("SELECT * FROM books;").await.unwrap();
let (title,author,date): (String,String,i32) = row.unwrap().try_into().unwrap();
println!("{} {} {}", title, author, date);

查询迭代器

let mut rows = conn.query_iter("SELECT * FROM books;").await.unwrap();
while let Some(row) = rows.next().await {
    let (title,author,date): (String,String,chrono::NaiveDate) = row.unwrap().try_into().unwrap();
    println!("{} {} {}", title, author, date);
}

类型映射

dataBend类型

通用数据类型

dataBend Rust
BOOLEAN bool
TINYINT i8,u8
SMALLINT i16,u16
INT i32,u32
BIGINT i64,u64
FLOAT f32
DOUBLE f64
DECIMAL String
DATE chrono::NaiveDate
TIMESTAMP chrono::NaiveDateTime
VARCHAR String
BINARY Vec<u8>

半结构化数据类型

dataBend Rust
ARRAY[T] Vec<T>
TUPLE[T,U] (T,U)
MAP[K,V] HashMap<K, V>
VARIANT String
BITMAP String
GEOMETRY String

注意: VARIANT 是一个json编码的字符串。示例

CREATE TABLE example (
    data VARIANT
);
INSERT INTO example VALUES ('{"a": 1, "b": "hello"}');
let row = conn.query_row("SELECT * FROM example limit 1;").await.unwrap();
let (data,): (String,) = row.unwrap().try_into().unwrap();
let value: serde_json::Value = serde_json::from_str(&data).unwrap();
println!("{:?}", value);

依赖项

~25–40MB
~636K SLoC