首页 > 解决方案 > Nodejs 和 SQLite 如何创建多个表?

问题描述

我对在一个数据库中创建多个表有疑问。我尝试运行 2 个表,但似乎在第一个 db.run( 之后CREATE TABLE,第二个 db.run(CREATE TABLE 不会在数据库中创建第二个表,这是我使用的代码:

//数据库.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;

标签: javascriptnode.jssqlite

解决方案


推荐阅读