11

postgresql 9 でテーブルを作成しました

create table stillbirth(id serial primary key, state varchar(100), count int not null, year int not null); 

Sequelize 1.4.1 バージョンで node.js にサンプルを書き込もうとしています。

上記の表を次のようにマッピングしました

var StillBirth = sequelize.define('stillbirth',
{ id: {type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true},
state: Sequelize.STRING,
year: Sequelize.INTEGER,
count: Sequelize.INTEGER
}, {timestamps: false, freezeTableName: true});

Stillbirth の新しいインスタンスを作成して保存しようとすると、エラーが発生します。

/** 新しいインスタンス作成コード **/

StillBirth
   .build({state: objs[j].state, year: objs[j].year, count: objs[j].count})
   .save()
   .error(function(row){
         console.log('could not save the row ' + JSON.stringify(row));
        })
   .success(function(row){
       console.log('successfully saved ' + JSON.stringify(row));
   })

私が得るエラー

*実行: INSERT INTO "死産" ("状態","年","カウント","id") VALUES ('アーンドラ プラデシュ',2004,11,NULL) RETURNING ; 行 {"length":110,"name":"error","severity":"ERROR","code":"23502","file":"execMain.c","line": を保存できませんでした: "1359","ルーチン":"ExecConstraints"}

生成されたSQLを見ると、理想的にはデータベースによって生成されるべき主キーにnullが設定されています。

ここで何が欠けているのか誰かが私を助けることができますか?

4

4 に答える 4

20

と呼ばれる特別なフラグを使用して Sequelize をインスタンス化する必要がありますomitNull

var sequelize = new Sequelize('db', 'user', 'pw', {
  omitNull: true
})

これはdisable inserting undefined values as NULL. http://sequelizejs.com/#usage-options

v1.5.x または 1.6.0-betaX に更新する必要がある場合があります

于 2013-01-15T07:37:04.997 に答える
4

からの回答を拡張するにはsdepold、彼が推奨omitNullしたように、sequelizenullが生成された SQL に値を追加しないようにすることができます。一般に、これは適切であり、部分的な更新を実行することもできます。

var sequelize = new Sequelize('db', 'user', 'pw', {
  omitNull: true
})

ただし、注意点が 1 つあります。nullそれが合法的にやりたいことである場合、列をどのように設定しますか?? omitNull答えは、セーブの一部としてパスできるということです。

user.address = null;
user.save({omitNull: false});

また

user.update({address: null}, {omitNull: false});
于 2015-10-05T21:12:51.663 に答える
2

create メソッドを介して設定できる属性を定義することもできます。これを使用すると、たとえば User モデルを制限して、ユーザー名とアドレスのみを設定し、管理フラグは設定しないようにすることができます。

User.create({ username: 'barfooz', isAdmin: true }, { fields: [ 'username' ] }).then(user => {
  // let's assume the default of isAdmin is false:
  console.log(user.get({
    plain: true
  })) // => { username: 'barfooz', isAdmin: false }
})
于 2018-11-16T10:22:23.277 に答える