8个版本
0.4.3 | 2024年1月16日 |
---|---|
0.4.2 | 2022年12月7日 |
0.4.1 | 2022年7月10日 |
0.3.0 | 2022年5月7日 |
0.1.0 | 2021年8月25日 |
#1642 在 数据库接口
每月 33 次下载
320KB
6.5K SLoC
firebirust
firebirust是Firebird RDBMS数据库的数据库驱动,使用Rust编写。https://firebirdsql.org/
它试图提供一个类似于Rusqlite https://github.com/rusqlite/rusqlite的接口。
支持的Firebird
支持Firebird 3.0+
代码示例
数据库连接
use firebirust::Connection;
let mut conn =
Connection::connect("firebird://SYSDBA:masterkey@localhost/tmp/rust-firebird-test.fdb")
.unwrap();
执行SQL语句
conn.execute_batch(
r#"
CREATE TABLE foo (
a INTEGER NOT NULL,
b VARCHAR(30) NOT NULL UNIQUE,
c VARCHAR(1024),
d DECIMAL(16,3) DEFAULT -0.123,
e DATE DEFAULT '1967-08-11',
f TIMESTAMP DEFAULT '1967-08-11 23:45:01',
g TIME DEFAULT '23:45:01',
h BLOB SUB_TYPE 1,
i DOUBLE PRECISION DEFAULT 0.0,
j FLOAT DEFAULT 0.0,
PRIMARY KEY (a),
CONSTRAINT CHECK_A CHECK (a <> 0)
)
"#,
)
.unwrap();
执行带参数的SQL语句
conn.execute(
"insert into foo(a, b, c, h) values (?, ?, ?, ?)",
(1, "a", "b", "This is a pen"),
)
.unwrap();
conn.execute(
"insert into foo(a, b, c, e, g, i, j) values (2, 'A', 'B', '1999-01-25', '00:00:01', 0.1, 0.1)",
(), // empty list of parameters.
)
.unwrap();
conn.commit()
执行查询并获取结果
let mut stmt = conn.prepare("select * from foo").unwrap();
for row in stmt.query(()).unwrap() {
let a:i32 = row.get(0).unwrap();
println!("a={}", a);
}
执行查询并映射
use chrono::{NaiveDate, NaiveDateTime, NaiveTime};
use rust_decimal::Decimal;
#[derive(Debug)]
struct Foo {
a: i32,
b: String,
c: String,
d: Decimal,
e: NaiveDate,
f: NaiveDateTime,
g: NaiveTime,
h: Option<Vec<u8>>,
i: f64,
j: f32,
}
let mut stmt = conn.prepare("select * from foo where a=?").unwrap();
let foo_iter = stmt
.query_map((1,), |row| {
Ok(Foo {
a: row.get(0).unwrap(),
b: row.get(1).unwrap(),
c: row.get(2).unwrap(),
d: row.get(3).unwrap(),
e: row.get(4).unwrap(),
f: row.get(5).unwrap(),
g: row.get(6).unwrap(),
h: row.get(7).unwrap(),
i: row.get(8).unwrap(),
j: row.get(9).unwrap(),
})
})
.unwrap();
for foo in foo_iter {
println!("{:?}", foo);
}
在事务中执行
let mut trans = conn.transaction().unwrap();
trans.execute(
"delete from foo where a in (1, 3)", ())
.unwrap();
trans.commit()
依赖
~9MB
~166K SLoC