Почему Rusqlite создает только первую таблицу при выполнении моего скрипта инициализации?

Я хочу создать базу данных с помощью rusqlite, в ней должно быть несколько таблиц, поэтому я создал файл create.sql, содержащий код SQL для создания таблиц.

В моем воспроизведенном примере это выглядит так:

create table TestTable1 (
    id integer primary key
);

create table TestTable2 (
    id integer primary key
);

Затем я запускаю его с помощью Rust, вот так:

fn main() {
    let db = rusqlite::Connection::open("test.db").unwrap();

    let command = std::fs::read_to_string("create.sql").unwrap();

    db.execute(&command, []).unwrap();
}

Но когда я открываю файл в браузере БД, он содержит только TestTable1. Я также не вижу его в необработанном двоичном файле базы данных и не могу получить доступ к таблице с помощью rusqlite, поэтому я почти уверен, что она не создается.

Так почему же rusqlite закрывается после создания первой таблицы?

🤔 А знаете ли вы, что...
SQL может работать с большими объемами данных благодаря оптимизации и индексам.


50
1

Ответ:

Решено

Вместо этого используйте .execute_batch().

Просто .execute() выполняет только один оператор (как описано). Вызов .execute() с несколькими операторами будет игнорировать остальные, если вы не согласитесь использовать флаг функции "extra_check". Дополнительную информацию смотрите в этом выпуске GitHub.