簡體   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