为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 sqlite3 db.get 和 db.all 中使用 async/await?

如何在 sqlite3 db.get 和 db.all 中使用 async/await?

牧羊人nacy 2023-05-18 09:52:40
这是我的服务器 mcve:const express = require("express");const app = express();const fs = require("fs");const dbFile = "./sqlite.db";const exists = fs.existsSync(dbFile);const sqlite3 = require("sqlite3").verbose();const db = new sqlite3.Database(dbFile);app.get("/", async (req, resp) => {  await db.run(`INSERT INTO Times VALUES (${ Date.now() })`);  let rows = await db.all("SELECT time FROM Times");  console.log(rows); // The line where I console log rows  resp.send(rows);});app.listen(process.env.PORT || 8080);process.on("uncaughtException", console.log);上面的服务器正在记录一个数据库对象,如下所示,Database {}每次我刷新网站时在控制台中,但我希望它记录我插入数据库的行。我在这里做错了什么?
查看完整描述

2 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

如果 sqlite3 不支持 async/await 那么你需要创建一个像这样的 ex 承诺的异步函数


async function db_all(query){

    return new Promise(function(resolve,reject){

        db.all(query, function(err,rows){

           if(err){return reject(err);}

           resolve(rows);

         });

    });

}

然后像这样使用它


await db_all("SELECT time FROM Times");

对需要使用的 sqlite3 中的每个函数使用相同的方法。


最好的方法是创建一个模块并覆盖您需要的所有这些方法


查看完整回答
反对 回复 2023-05-18
?
www说

TA贡献1775条经验 获得超8个赞

NPM 上有几个 SQLite 包。

sqlite3

这是您正在使用的包。它是基于回调的,应该像这样使用:

db.all("SELECT time FROM Times", function(err, rows) { });

注意:.all()函数返回数据库实例,而不是结果,因此您可以这样做:db.all(query1, (err, rows) => {}).all(query2, (err, rows) => {});。Query2 不会等待 query1 完成。

sqlite

这是包的包装器sqlite3,事实上,需要安装它才能运行。这是基于承诺的:

const rows = await db.all("SELECT time FROM Times");

更好的sqlite

这是一个完全不同的包。它不像上面两个示例那样异步运行查询,而是在主线程中运行每个查询。它的作者认为这样更好(对于典型的 SQLite 工作负载)。

const rows = db.prepare("SELECT time FROM Times").all();


查看完整回答
反对 回复 2023-05-18
?
互换的青春

TA贡献1797条经验 获得超6个赞

以上都不是我的选择:(

'better-sqlite' 是 python-ballasted 包,它只是增长容器 'sqlite' 看起来像 M$ 打字稿掌握培训

我使用这个不错且简单的解决方案 https://www.scriptol.com/sql/sqlite-async-await.php

或者当需要事务支持并且使用额外的小包没有问题时 https://www.npmjs.com/package/sqlite-async


查看完整回答
反对 回复 2023-05-18
  • 2 回答
  • 0 关注
  • 315 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信