繁体   English   中英

在 Nodejs Sequelize 模型中,如何获取属性的类型信息?

[英]In a Nodejs Sequelize model, how to obtain type information of attributes?

我有一个工作模型PostgressequelizeNodeJS 假设模型是Person并且有nameage字段。 现在我想动态检查模型类并获取有关它的属性的信息,例如它们的name和最重要的type

使用Person.attributes我得到一些信息:

name:
{ type:
  { options: [Object],
    _binary: undefined,
    _length: 255 },

但是正如您所看到的, type对象并没有告知namevarcharboolean

有谁知道,如何使用sequelize获取这些信息

您可以迭代模型的rawAtributes

for( let key in Model.rawAttributes ){
    console.log('Field: ', key); // this is name of the field
    console.log('Type: ', Model.rawAttributes[key].type.key); // Sequelize type of field
}

因此, nameSequelize.STRING将是

Field: name
Type: STRING

或者你可以做几乎相同的迭代,但是使用Model.rawAttributes[key].type.key你可以使用Model.rawAttributes[key].type.toSql() ,这会产生这个结果

Field: name
Type: VARCHAR(255)

编辑

访问字段的defaultValue值:

Model.rawAttributes[field].defaultValue

检查字段是否允许NULL值:

Model.rawAttributes[field].allowNull

您似乎正在寻找本机类型信息。

我不熟悉 Sequelize,但我知道它在下面使用node-postgres驱动程序,它会自动为您进行的每个查询提供类型信息。

下面是一个使用pg-promise动态获取any_table类型详细信息的简单示例:

var pgp = require('pg-promise')(/*initialization options*/);
var db = pgp(/*connection details*/);

db.result('SELECT * FROM any_table LIMIT 0', [], a => a.fields)
    .then(fields => {
        // complete details for each column 
    })
    .catch(error => {
        // an error occurred
    });

那里的每一列都有几个可用的字段,包括您要查找的namedataTypeID ;)

作为更新,遵循确实使用 Sequelize 的答案......

不同之处在于,这里我们直接获取原始值,因为它们由 PostgreSQL 提供,因此dataTypeID是原始类型 Id,正如 PostgreSQL 所支持的那样,而TYPE: STRING是由 Sequelize 实现的解释类型。 此外,我们在这里动态获取类型详细信息,而不是在 Sequelize 示例中静态获取。

item.rawAttributes[key].type.key === this.DataTypes.JSONB.key; @piotrbienias 以上比较有效吗? (很抱歉在这里写,因为我无法添加评论)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM