Rust rusqlite で、sqlite3を操作する例 #Rust
■ 概要:
Rustで、sqlite3を操作するメモです
■ 環境
Rust
rustc 1.46.0
cargo 1.46.0
■ 参考サイト様
https://docs.rs/rusqlite/0.24.0/rusqlite/
■ コード例
・上記ページの参考ですが、
https://gist.github.com/kuc-arc-f/a9d18b7619d4d685a21d86772e20df05
use rusqlite::{params, Connection, Result};
#[derive(Debug)]
struct Person {
id: i32,
name: String,
data: Option<Vec<u8>>,
}
fn main() -> Result<()> {
let conn = Connection::open_in_memory()?;
conn.execute(
"CREATE TABLE person (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
data BLOB
)",
params![],
)?;
let me = Person {
id: 0,
name: "Steven".to_string(),
data: None,
};
conn.execute(
"INSERT INTO person (name, data) VALUES (?1, ?2)",
params![me.name, me.data],
)?;
let mut stmt = conn.prepare("SELECT id, name, data FROM person")?;
let person_iter = stmt.query_map(params![], |row| {
Ok(Person {
id: row.get(0)?,
name: row.get(1)?,
data: row.get(2)?,
})
})?;
for person in person_iter {
println!("Found person {:?}", person.unwrap());
}
Ok(())
}
・実行, select できました。
$ cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.03s
Running `target/debug/sqlite-test`
Found person Person { id: 1, name: "Steven", data: None }
■ Cargo.toml
[dependencies]
rusqlite = "0.24.0"
■ 補足
・2020/09/17
json データを読み込み。sqlite3に書込むサンプルを追加しました。
速度は、1000件で、5sec前後でしたので。1件 = 5msec 程のようでした。
fn exec_sql_array(file_sqlite3: String, items: Vec<TaskItem>) {
let conn = Connection::open(file_sqlite3).unwrap();
for row in &items {
// println!("exe.name={}", &row.name );
let s_title = &row.title;
let s_content = &row.content;
let me = TaskItem {
id: 0,
title: s_title.to_string(),
content: s_content.to_string(),
};
conn.execute(
"INSERT INTO tasks (title, content) VALUES (?1, ?2)",
params![ me.title, me.content ],
).unwrap();
}
// Ok(())
}
■ 参考のコード
ここから先は
0字
Rust WebAssembly 開発の事例、ノウハウに関する記事を集めました。第2回 ■ 免責事項 / 注記 , 内容について動作確…
この記事が気に入ったらサポートをしてみませんか?