knex - 原始查询执行 - 如何获取数据库结果以及数据类型

knex - Raw query execute - how to get the db result along with data type

在使用 knex (oracle) npm 执行原始查询时,如何获取每一列的数据类型以及结果。

select name,age from customers;

当我们使用 nodejs 将其作为原始查询执行时,我们可以获得选定的列作为数组结果。

rows:[{name: 'SAM', age: 35},{name:'IMRAN',age:25}]

我需要数据以及每一列的数据类型以及原始查询的结果。

预期结果:

{ "result": { "rows": [{ "name": "SAM", "age": 35 }, { "name": "IMRAN", "age": 25 }], "columns_details": { "name": "varchar 2(32)", "age": "number(2)" } } }

是否有任何选项可用于获得上述结果?请建议我获得此要求。

提前致谢。

对于 knex.raw 查询,某些驱动程序可能 return 还提供数据类型信息。不过,Knex 并未为此提供任何特殊支持,因此您需要查看 node-oracledb 文档,了解如何获取该列元数据。

我 运行 使用 postgres 作为数据库遇到了同样的问题。 SELECT 查询的数据库结果位于从 .raw()

返回的 .rows 键中

另一个问题是原始查询不会自动 camelCase 结果,所以我也不得不处理它。

我最终为 运行 原始查询创建了一个小的异步实用程序函数,提取结果,camelCase 键。

import { camelCase, mapKeys } from 'lodash';

export const rawQuery = async (query) => {
  const result = await knex.raw(query);
  return result && result.rows
    ? result.rows.map((el) => mapKeys(el, (_, key) => camelCase(key)))
    : [];
};

参数 query 是一个包含任意 SQL SELECT 查询的字符串。此函数不允许将变量传递到查询中,但这将是一个简单的扩展。