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回 ■ 免責事項 / 注記 , 内容について動作確…

この記事が気に入ったらサポートをしてみませんか?