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

sd2nnvve  于 2023-01-05  发布在  其他
关注(0)|答案(2)|浏览(115)

前续集的人在这里。
使用原始Knex语句从MariaDB中提取数据的最佳方法是什么?以下是我尝试过的两种方法:
玛丽亚数据库:

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

解释结果的jscript:

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

还有这个玛丽亚·DB

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

脚本:

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

这两种方法都可以使用,但可能有一种比使用JSON.parse更简洁的方法。
建议?
注意:我当然理解使用raw会有争议--我有许多非常大的SQL语句,它们在以前的应用程序中,我宁愿(现在)直接使用它们,而不是用纯Knex重写它们。

    • EDIT**:这可能是"足够好的",因为看起来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));

但至少真正丑陋的东西被隐藏起来了,在节点内部。

k10s72fa

k10s72fa1#

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

rkttyhzu

rkttyhzu2#

SQL数据库被设计为返回列的行;任何通过JSON路由所有内容的查询都不是您所要求的“最佳方法”。
您的第一次尝试至少使用了行,因此比第二次好。
也就是说,如果您只是修改现有代码以使用Knex,而不是重写它,那么任何需要最少更改的代码都会导致更少的bug,应该是首选。

相关问题