Open3
sqlxでSQLiteを操作する

sqlx:https://docs.rs/sqlx/latest/sqlx/index.html#
Cargo.toml
[package]
name = "database"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
dotenv = "0.15.0"
sqlx = { version = "0.7.2", features = ["runtime-tokio", "sqlite"] }
tokio = { version = "1.33.0", features = ["full"] }
.env
DATABASE_URL=sqlite:./db/database.db

SQLiteのデータベースを作成する.
作成されるのは.env
に記載されている./db/database.db
main.rs
use dotenv;
use sqlx::{Sqlite, migrate::MigrateDatabase};
#[tokio::main]
async fn main() {
Sqlite::create_database(&dotenv::var("DATABASE_URL").unwrap()).await.unwrap();
}

テーブルの作成をsqlx::query()
で行う.
main.rs
// データベースに接続する.
let pool = sqlx::sqlite::SqlitePool::connect(&dotenv::var("DATABASE_URL").unwrap()).await?;
// IF NOT EXISTSで既に存在している場合は作成しない.
let _f = sqlx::query("CREATE TABLE IF NOT EXISTS tablename (id,hoge,fuga)").execute(&pool).await;
同様にSQLを記述できるmacrosqlx::query!()
があるが,これを使用すると,事前にエラーチェックが行われるので,データベースが存在しないときにコンパイルエラーとなる.
通常はコンパイルエラーでよいが,今回は一度の実行でデータベースそのものの作成とテーブルの作成を行うので,エラーが起こると困る.