如何使用rust sqlx创建SQLite数据库

qncylg1j  于 12个月前  发布在  SQLite
关注(0)|答案(3)|浏览(259)

我正在尝试从rusqlite => sqlx转换。
rusqlite打开连接会调用SQLite::open,并创建db文件。如下操作:

use rusqlite::Connection;

Connection::open(db_filename)

字符串
然而,我在sqlx端遵循文档(https://github.com/launchbadge/sqlx#connecting),他们立即启动我创建一个池:

use sqlx::sqlite::{SqlitePoolOptions};

SqlitePoolOptions::new()
            .max_connections(1)
            .connect(&format!("sqlite://{}", db_filename))
            .await
            .map_err(|err| format!("{}\nfile: {}", err.to_string(), db_filename))?;


这实际上产生Result<_, String>消息:

Error: "error returned from database: unable to open database file\nfile: /path/to/my.db"


我不清楚在sqlx世界中如何在第一次 Boot 时实际写入这些db文件。
小费?

zsbz8rwp

zsbz8rwp1#

我在他们的问题跟踪器中发现了一个问题,你可以在文件名上使用?mode=rwc查询样式参数。
https://github.com/launchbadge/sqlx/issues/1114#issuecomment-827815038
添加查询解决了问题。

au9on6nz

au9on6nz2#

您还可以将SqliteConnectOptionsPool::connect_with结合使用于较新版本的sqlx。

use sqlx::{sqlite::SqliteConnectOptions, Error, SqlitePool};
use std::{future::Future, path::Path};

async fn connect(filename: impl AsRef<Path>) -> impl Future<Output = Result<SqlitePool, Error>> {
    let options = SqliteConnectOptions::new()
        .filename(filename)
        .create_if_missing(true);

    SqlitePool::connect_with(options)
}

字符串
SqliteConnectOptions非常灵活,支持许多有用的选项,例如加载扩展。

mu0hgdu0

mu0hgdu03#

标准做法是设置您的DATABASE_URL

sqlx db create

字符串
然后运行

sqlx migrate run

相关问题