[英]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.