前续集的人在这里。
使用原始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));
但至少真正丑陋的东西被隐藏起来了,在节点内部。
2条答案
按热度按时间k10s72fa1#
要使用Knex从MariaDB数据库中提取数据,您可以在Knex查询生成器对象上使用.select()方法。此方法允许您指定要从数据库中检索的列,以及使用.where()方法的任何条件或筛选器。
rkttyhzu2#
SQL数据库被设计为返回列的行;任何通过JSON路由所有内容的查询都不是您所要求的“最佳方法”。
您的第一次尝试至少使用了行,因此比第二次好。
也就是说,如果您只是修改现有代码以使用Knex,而不是重写它,那么任何需要最少更改的代码都会导致更少的bug,应该是首选。