10 个版本
0.2.7 | 2023年2月12日 |
---|---|
0.2.6 | 2020年8月7日 |
0.2.5 | 2020年2月12日 |
0.2.4 | 2020年1月23日 |
0.1.1 | 2019年7月24日 |
#755 在 数据库接口
518 每月下载量
用于 3 个包
195KB
4.5K SLoC
odbc-iter
是一个基于 odbc
包的 Rust 高级数据库访问库,使用原生 ODBC 驱动程序访问各种数据库。
使用此库,您可以
- 连接到支持 ODBC 标准的任何数据库(例如,通过
unixodbc
库和 ODBC 数据库驱动程序), - 运行一次性、预编译或参数化查询,
- 通过标准的
Iterator
接口迭代结果集, - 自动将行转换为
- Rust 标准类型的元组,
- 实现特质的自定义类型,
- 动态类型值的向量,
- 为多线程应用程序创建线程局部连接。
尚需补充的内容
- 对二进制编码的数值类型(十进制数)的全面支持 - 当前的
Decimal
实现依赖于解析值的字符串表示(可以通过rust_decimal
功能启用)。 - 此列表的其余部分 - 请在
GitHub
问题跟踪器中打开问题,以报告缺失的功能、错误等。
示例用法
连接并运行具有行类型转换的一次性查询
use odbc_iter::{Odbc, ValueRow};
// Connect to database using connection string
let connection_string = std::env::var("DB_CONNECTION_STRING")
.expect("DB_CONNECTION_STRING environment not set");
let mut connection = Odbc::connect(&connection_string)
.expect("failed to connect to database");
// Handle statically guards access to connection and provides query functionality
let mut db = connection.handle();
// Get single row single column value
println!("{}", db.query::<String>("SELECT 'hello world'").expect("failed to run query")
.single().expect("failed to fetch row"));
// Iterate rows with single column
for row in db.query::<String>("SELECT 'hello world' UNION SELECT 'foo bar'")
.expect("failed to run query") {
println!("{}", row.expect("failed to fetch row"))
}
// Prints:
// hello world
// foo bar
// Iterate rows with multiple columns
for row in db.query::<(String, i8)>(
"SELECT 'hello world', CAST(24 AS TINYINT) UNION SELECT 'foo bar', CAST(32 AS TINYINT)")
.expect("failed to run query") {
let (string, number) = row.expect("failed to fetch row");
println!("{} {}", string, number);
}
// Prints:
// hello world 24
// foo bar 32
// Iterate rows with dynamically typed values using `ValueRow` type that can represent
// any row
for row in db.query::<ValueRow>("SELECT 'hello world', 24 UNION SELECT 'foo bar', 32")
.expect("failed to run query") {
println!("{:?}", row.expect("failed to fetch row"))
}
// Prints:
// [Some(String("hello world")), Some(Tinyint(24))]
// [Some(String("foo bar")), Some(Tinyint(32))]
依赖项
~3.5–5MB
~86K SLoC