• Nodejs sqlite3 почему не записывается результат запроса в переменную?

    viaskit
    @viaskit
    Попробую и я внести свои пять копеек
    module.exports.balance = function (tele_id) {
        return new Promise((resolve, reject) => {
            db.get("SELECT * FROM users WHERE tele_id = ?", [tele_id], (err, result) => {
                if (err) {
                    reject(err);
                }
                resolve(result)
            });
        });
    }
    // Где то в другом месте
    balance(123).then((row) => {
        // Обработка записи из таблицы
    }).catch((err) => {
        // Что то пошло не так :(
    })

    Второй вариант
    module.exports.balance = function (tele_id, callback) {
        db.get("SELECT * FROM users WHERE tele_id = ?", [tele_id], callback);
    }
    
    // Где то в другом месте
    balance(123, function(err, row) {
       if (err) {
          throw Error(err);
       }
       console.log(row);
    });
    Ответ написан
    1 комментарий
  • Python sqlite, почему возникает ошибка?

    @nirvimel
    telebotиспользует threading, функции с декоратором message_handler вызываются из потока на его тредпуле. Курсор sqlite3, созданный в конструкторе db из главного потока, не может быть использован в вызове send_welcome -> user_register -> db.query из другого потока.

    Перенесите создание курсора cur = self.con.cursor() в метод query и сделайте его локальной переменной.
    Или кешируйте создаваемые курсоры в threading.local, если производительность в этой точке критична (не думаю, что это так, исходя из задач бота).
    Ответ написан
    Комментировать