sufficialize.js 타임스탬프가 DATTIME이 아닙니다.
node.js app에는 정의하려는 여러 모델이 있습니다.TIMESTAMP
기본 타임스탬프를 포함한 열 입력created_at
그리고.updated_at
.
sufficialize.js의 문서에 따르면 다음과 같은 것이 있습니다.DATE
데이터 형식생성됩니다.DATETIME
열을 표시합니다.
예:
var User = sequelize.define('User', {
... // columns
last_login: {
type: DataTypes.DATE,
allowNull: false
},
...
}, { // options
timestamps: true
});
생성이 가능합니까?TIMESTAMP
대신 열을 선택하시겠습니까?
'TIM 스탬프' 문자열을 유형에 전달하십시오.
module.exports = {
up: function (queryInterface, Sequelize) {
return queryInterface.createTable('users', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
created_at: {
type: 'TIMESTAMP',
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP'),
allowNull: false
},
updated_at: {
type: 'TIMESTAMP',
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP'),
allowNull: false
}
});
}
};
Sequetize Documentation에 따라 기본값인 Sequetize 값을 설정할 수 있습니다.이제 타임스탬프 필드를 만듭니다.이렇게 하면 효과가 있지만 실제로 타임스탬프를 채우는 데는 Sequetize에 의존합니다.테이블에 "CURRENT_TIMESTAMP" 특성은 생성되지 않습니다.
var Foo = sequelize.define('Foo', {
// default values for dates => current time
myDate: {
type: Sequelize.DATE,
defaultValue: Sequelize.NOW
}
});
따라서 타임스탬프 필드가 있다는 최종 목표는 달성되지만 실제 데이터베이스 엔진이 아닌 Sequitize를 통해 제어됩니다.
또한 타임스탬프 기능이 없는 데이터베이스에서도 작동하는 것으로 나타나 이점이 될 수 있습니다.
참조 URL: http://sequelize.readthedocs.org/en/latest/docs/models-definition/ #definition
저의 경우 아래와 같은 모델을 만듭니다.
module.exports = (sequelize, type) => {
return sequelize.define('blog', {
blogId: {
type: type.INTEGER,
primaryKey: true,
autoIncrement: true
},
text: type.STRING,
createdAt:{
type: 'TIMESTAMP',
defaultValue: sequelize.literal('CURRENT_TIMESTAMP'),
allowNull: false
},
updatedAt:{
type: 'TIMESTAMP',
defaultValue: sequelize.literal('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'),
allowNull: false
}
})
}
타임스탬프를 만드는 데 사용할 수도 있습니다.
const moment = require('moment-timezone');
createdAt: {
type: DataTypes.NOW,
allowNull: false,
defaultValue: moment.utc().format('YYYY-MM-DD HH:mm:ss'),
field: 'createdAt'
},
대신에
type: DataTypes.DATE,
아래 코드를 사용
createdAt: {
allowNull: false,
type: Sequelize.DATE,
defaultValue: Sequelize.fn('NOW'),
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE,
defaultValue: Sequelize.fn('NOW'),
},
sqLite를 사용하여 수행한 작업은 TIMESTAMP용 사용자 지정 sql 로직으로 확장된 DataTypes이며 잘 작동했습니다.MySQL에 대한 sql 구문이 어떻게 보여야 하는지 100% 확신할 수는 없지만 제가 가지고 있는 것과 비슷한 것 같습니다.예를 보십시오.
function (sequelize, DataTypes) {
var util = require('util');
var timestampSqlFunc = function () {
var defaultSql = 'DATETIME DEFAULT CURRENT_TIMESTAMP';
if (this._options && this._options.notNull) {
defaultSql += ' NOT NULL';
}
if (this._options && this._options.onUpdate) {
// onUpdate logic here:
}
return defaultSql;
};
DataTypes.TIMESTAMP = function (options) {
this._options = options;
var date = new DataTypes.DATE();
date.toSql = timestampSqlFunc.bind(this);
if (!(this instanceof DataTypes.DATE)) return date;
DataTypes.DATE.apply(this, arguments);
};
util.inherits(DataTypes.TIMESTAMP, DataTypes.DATE);
DataTypes.TIMESTAMP.prototype.toSql = timestampSqlFunc;
var table = sequelize.define("table", {
/* table fields */
createdAt: DataTypes.TIMESTAMP,
updatedAt: DataTypes.TIMESTAMP({ onUpdate: true, notNull: true })
}, {
timestamps: false
});
};
MySQL에 대해 필요한 것은 타임스탬프SqlFunc 함수에서 SQL 유형 생성을 변경하는 것입니다. 예를 들어 defaultSql 변수는'TIMESTAMP DEFAULT CURRENT_TIMESTAMP'
언급URL : https://stackoverflow.com/questions/29652538/sequelize-js-timestamp-not-datetime
'programing' 카테고리의 다른 글
자바스크립트에서 서버를 ping할 수 있습니까? (0) | 2023.08.11 |
---|---|
도커가 macOS에서 기본적으로 Linux/amd64 플랫폼을 사용하도록 강제 설정 (0) | 2023.08.11 |
동기화 시 MariaDB / Sequetize SQL 구문 오류 발생 (0) | 2023.08.11 |
고유한 url-frinly 경로를 생성하는 루프 (0) | 2023.08.11 |
파이썬에서 WSDL(SOAP) 웹 서비스를 사용하려면 어떻게 해야 합니까? (0) | 2023.08.11 |