猿问

当我看到该列存在时,SQLite 错误“没有这样的列”

这里的背景故事是我正在开发 Discord 机器人。要求的功能之一是让它侮辱。我认为让用户能够通过 SQLite 3 数据库(特别是 better-sqlite3)添加侮辱会很有趣,在这样做的过程中,我还想跟踪每个侮辱的最近使用情况(这是为了将来在“insultinfo”类型的命令中使用)。我添加了一个名为“lastUsed”的 DATETIME 列。当添加新的侮辱时,我的 insultadd 命令能够写入此列。问题是当我调用 insult 命令时,它应该说出侮辱然后用当前日期更新 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();

},


湖上湖
浏览 74回答 1
1回答

POPMUISE

我想我明白了。我最终使用了 date.toString() 并且它似乎已经完成了工作。更新 db.prepare 语句后我收到的错误消息表明它没有将该日期变量视为它可以使用的东西,因此 .toString() 解决方法。我必须对此进行测试,看看这是否会影响我对该列进行排序的能力,因为这对我来说仍然是一个全新的事物,但至少命令本身正在运行并且数据库表正在更新。如果有人看到我在这里的方式可能是愚蠢的,我愿意接受更多反馈。更新:经过进一步测试,设置 date = Math.floor(new Date() / 1000) 在我的案例中效果更好。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答