我在Postgres
中有sequelize
和NodeJS
的工作模型。假设模型为Person
并且具有name
和age
字段。现在我想动态检查模型类并获取有关它的属性的信息,比如它们的名称和大多数类型。
使用Person.attributes
我得到了一些信息:
name:
{ type:
{ options: [Object],
_binary: undefined,
_length: 255 },
但正如您所看到的,type
对象未通知name
是varchar
或boolean
。
有谁知道,如何使用sequelize
答案 0 :(得分:3)
您可以迭代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
答案 1 :(得分:0)
您正在寻找原生类型信息。
我不熟悉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示例。
答案 2 :(得分:0)
item.rawAttributes [key] .type.key === this.DataTypes.JSONB.key; @piotrbienias以上比较是否有效? (很抱歉在这里写,因为我无法添加评论)