[英]In a Nodejs Sequelize model, how to obtain type information of attributes?
我有一个工作模型Postgres
和sequelize
中NodeJS
。 假设模型是Person
并且有name
和age
字段。 现在我想动态检查模型类并获取有关它的属性的信息,例如它们的name和最重要的type 。
使用Person.attributes
我得到一些信息:
name:
{ type:
{ options: [Object],
_binary: undefined,
_length: 255 },
但是正如您所看到的, type
对象并没有告知name
是varchar
或boolean
。
有谁知道,如何使用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
}
因此, name
为Sequelize.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
});
那里的每一列都有几个可用的字段,包括您要查找的name
和dataTypeID
;)
作为更新,遵循确实使用 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.