[英]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.