使用原始的KNEX语句从MariaDB提取数据



前续集人物在这里

使用原始的Knex语句从MariaDB提取数据的最佳方法是什么?以下是我尝试过的两种方法:

MariaDb:

SELECT    JSON_OBJECT(
...........
)  'JSON_OBJECT'

jscript解释结果:

for ( tmp of result[0] ) {   console.log (JSON.parse(tmp.JSON_OBJECT)) ; } 

和这个MariaDb:

SELECT    JSON_ARRAYAGG(
JSON_OBJECT(
..........
)
)  'JSON_ARRAYAGG'

jscript:

for ( tmp of JSON.parse(result[0][0]['JSON_ARRAYAGG'] )) { console.log(tmp)  ;  }

这两种方法都可以工作,但是可能有一种比使用JSON.parse更干净的方法。

建议吗?

注意:我当然明白使用raw有争议——我有很多非常大的sql语句,它们是在以前的应用程序中,我宁愿(现在)直接使用它们,而不是用纯Knex重写它们。

编辑:这可能"足够好";因为似乎knex raw并不一定返回对象。

节点:

SELECT    JSON_ARRAYAGG(
JSON_OBJECT(
..........
)
)  'JSON_ARRAYAGG'
.....................................
const result = await knex.raw( sqlStatement, sqlQuery);
return result[0][0].JSON_ARRAYAGG   ;

浏览器:

(async () => { try { let result = await  app.service('raw-service').find({query: sqlQuery}) ; newResult = result; } catch (e) { console.log(e); }  } )() ;
console.log(JSON.parse(newResult));

但是至少真正丑陋的东西被隐藏起来了,在node里面。

SQL数据库被设计为返回行或列;任何通过json路由的查询都不会是"最佳方法"。你要求。

您的第一次尝试至少使用行,因此比第二次更好。

也就是说,如果你只是修改现有的代码来使用Knex,而不是重写它,那么任何需要最小修改的代码都会导致更少的bug,应该是首选的。

要使用Knex从MariaDB数据库中提取数据,可以在Knex查询构建器对象上使用.select()方法。该方法允许您指定要从数据库中检索的列,以及使用.where()方法指定任何条件或过滤器。

相关内容

  • 没有找到相关文章

最新更新