SQLite 错误"No such column"当我可以看到该列存在时



这里的背景故事是我正在开发一个Discord机器人。其中一个请求的函数是让它进行lob侮辱。我认为让用户能够通过SQLite 3数据库(特别是better-sqlite3(添加侮辱会很有趣,在这样做的过程中,我还想跟踪每个侮辱的最新使用情况(这是为了将来在"insultinfo"类型命令中使用(。我添加了一个名为";lastUsed";。当添加新的侮辱时,我的insultadd命令能够写入此列。问题是,当我调用侮辱命令时,它应该说侮辱,然后用当前日期更新lastUsed字段。粘贴下面的代码。

问题是我得到了一个错误,上面写着";SQLiteError:没有这样的列:";然后它打印日期值,尽管我正在尝试更新lastUsed列,但我不知道如何解决这个问题。这个问题必须在db.prepare语句中,我只是不知道我需要做什么来解决它。

execute(msg, args) {
const SQLite = require("better-sqlite3");
const db = new SQLite('./userinputs.sqlite');
// Check if the table "userinputs" exists and has content from this guild.
const table = db.prepare(`SELECT count(*) FROM userinputs WHERE (guild = ${msg.guild.id} OR guild = 'Global') AND type = 'insult';`).get();
if (!table['count(*)']) {
return msg.channel.send("I don't have any insults yet");
}
var date = new Date();
const rawInsult = db.prepare(`SELECT * FROM userinputs WHERE type = 'insult' AND (guild = ${msg.guild.id} OR guild = 'Global') ORDER BY RANDOM() LIMIT 1;`).get();
const insult = rawInsult['content'];
const insultID = rawInsult['row'];
if (args[0]) {
var target = args[0];
} else {
var target = msg.author.username;
}
if (insult.includes('{}')) {
var finalInsult = insult.replace('{}', target);
} else {
var finalInsult = target + ' ' + insult;
}
msg.channel.send(finalInsult);
db.prepare(`UPDATE userinputs SET lastUsed = "${date}" WHERE row = ${insultID};`).run();
},

我想我明白了。我最终使用了date.toString((,它似乎完成了任务。我在更新db.prepare语句后收到的错误消息表明,它没有将该日期变量视为可以使用的变量,因此使用了.toString((解决方法。我必须对此进行测试,看看这是否会影响我对该列进行排序的能力,因为这对我来说仍然是一个全新的功能,但至少命令本身正在工作,数据库表正在更新。

不过,如果有人在这里看到我可能的愚蠢行为,我愿意接受更多的反馈。

更新:经过进一步的测试,设置date=Math.floor(new date((/1000(在我的情况下效果更好。

相关内容

最新更新