Как избежать текущего запроса SQLite3, если строка в таблице существует, но продолжить, если ее нет - PullRequest
0 голосов
/ 26 мая 2019

Итак, я интегрирую своего Discord.JS бота с SQLite3 и добавляю функцию, в которой пользователи могут хранить свой идентификатор и имя пользователя в таблице. В настоящее время то, что у меня есть, только создаст новую строку в таблице, если идентификатор и имя пользователя еще не существует в строке таблицы, и создаст новую строку, если данные не существуют. Я хочу знать, есть ли способ исключить что-либо из запроса, если строка существует, и чтобы я мог ее перехватить, а затем сделать что-то еще.

Я пытался if..else утверждений, но я хочу знать, есть ли более простой способ добиться этого.

Это то, что у меня есть в настоящее время, и работает как описано выше.

let userC = message.mentions.members.first()

    db.serialize(() => {
        db.run('CREATE TABLE IF NOT EXISTS user (id TEXT, name TEXT)');
        db.run(`INSERT INTO user (id, name) SELECT '${userC.id}', '${userC.user.username}' WHERE NOT EXISTS(SELECT 1 FROM user WHERE id = '${userC.id}' AND name = '${userC.user.username}')`)
    });
    message.reply('Added the user to the database.');

В идеале, если строка существует, message.reply('Added the user to the database.'); не будет выполняться и вместо этого продолжит с message.reply('That user already exists within the database'); Но если строка не существует, она вставляет строку и данные и продолжает только с message.reply('Added the user to the database.');

1 Ответ

1 голос
/ 26 мая 2019

Согласно API документов здесь , вы можете использовать Database.get() вместо Database.run(). Он работает так же, но обратный вызов вернет строки из SQL, которые вы можете проверить.

В приведенном ниже коде вы заметите, что я также реализовал заполнители для предотвращения внедрения SQL. Рассмотрим эту нормальную практику для пользовательских переменных.

const userC = message.mentions.users.first();

db.get(`SELECT 1 FROM user WHERE id = '${userC.id}' AND name = '?'`, [userC.username], (err, rows) => {
  if (err) return console.error(err);

  if (!rows[0]) {
    db.run(`INSERT INTO user (id, name) VALUES ('${userC.id}', '?'), [userC.username], err => {
      if (err) return console.error(err);

      message.reply('Added the user to the database.');
    });
  } else return message.reply('That user already exists within the database.');
});

Не забудьте также поймать обещания, возвращаемые message.reply().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...