簡體   English   中英

為什么即使我創建了 model,我仍然得到“沒有這樣的表”?

[英]Why do I get `no such table` even though I created the model?

我不明白為什么我會收到Error: SQLITE_ERROR: no such table: cities ,即使我使用 Sequelize 創建了 model。 我遵循了上次運行良好的相同代碼。
模型/cities.js

const { Sequelize, DataTypes } = require('sequelize');

const db = new Sequelize({
    dialect: 'sqlite',
    storage: './database.sqlite',
});

const Cities = db.define('cities', {
    userId: {
        type: DataTypes.STRING,
        unique: true,
        primaryKey: true,
        allowNull: false,
    },
    name: {
        type: DataTypes.STRING,
        allowNull: false,
    },
    // ...
    busStationsBuilt: {
        type: DataTypes.INTEGER,
        allowNull: false,
        defaultValue: 0,
    },
});

module.exports = { Cities };

db-init.js (手動運行):

const { Sequelize } = require('sequelize');

const db = new Sequelize({
    dialect: 'sqlite',
    storage: './database.sqlite',
});

require('./models/cities.js');

const force = process.argv.includes('--force') || process.argv.includes('-f');

db.sync({ force }).then(async () => {
    console.log('Database synced.');

    db.close();
}).catch(console.error);

命令/found.js

const { Cities } = require('../models/cities.js');
const { SlashCommandBuilder, EmbedBuilder } = require('discord.js');

module.exports = {
    data: new SlashCommandBuilder()
        .setName('found')
        .setDescription('Found your city!')
        .addStringOption(option =>
            option
                .setName('name')
                .setDescription('The name of your city!')
                .setRequired(true)
        ),
    async execute(interaction) {
        const name = interaction.options.getString('name');

        const cityAlreadyExists = await Cities.findOne({ where: { userId: interaction.user.id } });

        if (!cityAlreadyExists) {
            try {
                const city = await Cities.create({
                    userId: interaction.user.id,
                    name: name,
                });

                const cityEmbed = new EmbedBuilder()
                    .setColor(0x73a0d0)
                    .setTitle(city.name)
                    .setDescription('Here are your city\'s stats:')
                    .addFields(
                        { name: '😄 Happiness:', value: city.happiness },
                        { name: '🧍 Population:', value: city.population },
                        { name: '💵 Balance:', value: city.balance },
                        { name: '🪨 Resources:', value: city.resources },
                        { name: '👨‍👩‍👧‍👦 Crowdedness:', value: city.crowdedness },
                        { name: '🚗 Traffic:', value: city.traffic },
                        { name: '🛢️ Pollution:', value: city.pollution },
                    );

                return interaction.reply({ content: 'Your city has been created!', embeds: [cityEmbed] });
            } catch (error) {
                await interaction.reply({ content: 'An error occurred while creating your city. Support server: https://discord.gg/XuZNNJbf4U', ephemeral: true });
                return console.error(error);
            }
        } else {
            return interaction.reply('Your city already exists!');
        }
    }
}

我問過類似的問題,然后一切正常,所以我不確定這次出了什么問題。 運行db-init.js時沒有問題/錯誤,但運行/found時出現錯誤。

看起來您可能正在創建多個數據庫,因為存儲路徑變量是相對於您創建 Sequelize 數據庫的文件的:

const db = new Sequelize({
    dialect: 'sqlite',
    storage: './database.sqlite',
});

我建議您使用 sqlite 數據庫文件的絕對路徑。 查看此答案以獲取有關在 node.js 中獲取路徑信息的一些幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM