Nodejs и SQLite как создать несколько таблиц?

#javascript #node.js #sqlite

#javascript #node.js #sqlite

Вопрос:

У меня вопрос о создании нескольких таблиц в одной БД. Я пытаюсь запустить для 2 таблиц, но, похоже, после первой db.run( CREATE TABLE , второй db.run( CREATE TABLE не создает вторую таблицу в БД, вот код, который я использовал:

//database.js

 var sqlite3 = require('sqlite3').verbose();
var md5 = require('md5');
const users = require("./users");
const usersStatistic = require("./users_statistic");
const DBSOURCE = "db.sqlite";

let db = new sqlite3.Database(DBSOURCE, (err) => {
    if (err) {
        // Cannot open database
        console.error(err.message)
        throw err
    }else{
        console.log('Connected to the SQlite database.');
        db.run(`CREATE TABLE user (
            id integer,
            first_name text, 
            last_name text,
            email text UNIQUE,
            gender text,
            ip_address text,
            CONSTRAINT email_unique UNIQUE (email)
            )`,(err) => {
            if (err) {
                // Table already created
            }else{
                // Table just created, creating some rows

                let props = '';

                for (let i = 0; i < Object.keys(users[0]).length; i  ) {
                    if(i ===  Object.keys(users[0]).length - 1) {
                        props  = `${Object.keys(users[0])[i]}`
                    }else {
                        props  = `${Object.keys(users[0])[i]}, `
                    }
                }

                const insert = `INSERT INTO user (${props}) VALUES (?,?,?,?,?,?)`;

                for (let i = 0; i < users.length; i  ) {
                    const user = users[i];

                    db.run(insert,
                        Object.values(user)
                        // user['id'],
                        // user['first_name'],
                        // user['last_name'],
                        // user['email'],
                        // user['gender'],
                        // user['ip_address']
                    )
                }
                // db.run(insert, [users[0]['first_name'], users[0]['last_name'], "admin@example.com"])
                // db.run(insert, [users[1]['first_name'], users[2]['last_name'],"user@example.com"])
            }
        });
        //Start second table
        db.run(`CREATE TABLE user_statistic (
            user_id integer,
            date text, 
            page_views integer,
            clicks integer,
            )`,(err) => {
            if (err) {
                // Table already created
            }else{
                // Table just created, creating some rows
                let props = '';

                for (let i = 0; i < Object.keys(usersStatistic[0]).length; i  ) {
                    if(i ===  Object.keys(usersStatistic[0]).length - 1) {
                        props  = `${Object.keys(usersStatistic[0])[i]}`
                    }else {
                        props  = `${Object.keys(usersStatistic[0])[i]}, `
                    }
                }
                const insert = `INSERT INTO user (${props}) VALUES (?,?,?,?)`;

                console.log(insert)
                for (let i = 0; i < usersStatistic.length; i  ) {
                    const userStatistic = usersStatistic[i];
                    db.run(insert,
                        Object.values(userStatistic)
                    )
                }
            }
        });

    }
});

module.exports = db;

 

Ответ №1:

Привет, прошло некоторое время, но, похоже, никто не отвечает.

Я думаю, вы могли бы попробовать использовать

 db.serialize(()=>{
db.run([your 1st query])
db.run([your another query])
db.run([and another query])
}) 
db.close()