我正在使用MySQL构建一个新的NodeJS应用程序。 我需要使用现有的数据库模式。 我有一个mysql转储文件,它被加载到数据库中(在docker容器中)。 我试图自动生成模型和迁移,然后成功运行迁移。 我能够生成模型和迁移,但是在运行生成的迁移时会出现SQL语法错误。
以下是相关版本: 节点10-阿尔卑斯山
我尝试使用 sequelize-auto-migrations 模块生成迁移,并自动运行它们。生成初始迁移文件成功。
然而,当运行实际迁移时,会出现语法错误。
这是mysql导出文件的相关部分:
以下是相关版本: 节点10-阿尔卑斯山
"mysql": "^2.17.1",
"mysql2": "^1.6.5",
"sequelize": "^5.8.5",
"sequelize-auto": "^0.4.29",
"sequelize-auto-migrations": "^1.0.3"
我使用了 sequelize-auto 模块来自动生成模型。这样做是可行的。
sequelize-auto -o "./models" -d sequelize_auto_test -h localhost -u username -p 5432 -x password -e mysql
我尝试使用 sequelize-auto-migrations 模块生成迁移,并自动运行它们。生成初始迁移文件成功。
node ./node_modules/sequelize-auto-migrations/bin/makemigration --name <initial_migration_name>
然而,当运行实际迁移时,会出现语法错误。
node ./node_modules/sequelize-auto-migrations/bin/runmigration
这适用于许多表格,但是会遇到语法错误。
code: 'ER_PARSE_ERROR',
errno: 1064,
sqlState: '42000',
sqlMessage:
'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \') ENGINE=InnoDB\' at line 1',
sql: 'CREATE TABLE IF NOT EXISTS `osw` () ENGINE=InnoDB;' },
sql: 'CREATE TABLE IF NOT EXISTS `osw` () ENGINE=InnoDB;' }
以下是相关的 osw.js 模型(由 sequelize-auto 模块生成):
/* jshint indent: 2 */
module.exports = function(sequelize, DataTypes) {
return sequelize.define('osw', {
OSWID: {
type: DataTypes.INTEGER(10).UNSIGNED,
allowNull: false,
primaryKey: true
},
IdentificationID: {
type: DataTypes.INTEGER(10).UNSIGNED,
allowNull: true,
references: {
model: 'itemidentification',
key: 'IdentificationID'
}
},
ProposedHours: {
type: DataTypes.DECIMAL,
allowNull: true
},
WorkStartDate: {
type: DataTypes.DATEONLY,
allowNull: true
},
WorkEndDate: {
type: DataTypes.DATEONLY,
allowNull: true
},
FormatID: {
type: DataTypes.INTEGER(10).UNSIGNED,
allowNull: true,
references: {
model: 'formats',
key: 'FormatID'
}
},
WorkLocationID: {
type: DataTypes.INTEGER(10).UNSIGNED,
allowNull: true
}
}, {
tableName: 'osw'
});
};
这是mysql导出文件的相关部分:
CREATE TABLE `OSW` (
`OSWID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`IdentificationID` int(10) unsigned DEFAULT NULL,
`ProposedHours` decimal(10,2) DEFAULT NULL,
`WorkStartDate` date DEFAULT NULL,
`WorkEndDate` date DEFAULT NULL,
`FormatID` int(10) unsigned DEFAULT NULL,
`WorkLocationID` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`OSWID`),
KEY `OSW_FKIndex1` (`IdentificationID`),
KEY `OSW_Format` (`FormatID`),
CONSTRAINT `OSW_Format` FOREIGN KEY (`FormatID`) REFERENCES `formats` (`formatid`) ON DELETE SET NULL,
CONSTRAINT `OSW_Ident` FOREIGN KEY (`IdentificationID`) REFERENCES `itemidentification` (`identificationid`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1147 DEFAULT CHARSET=utf8 PACK_KEYS=0;
更新:我认为这个问题可能与自动生成的迁移有关。迁移文件似乎缺少列和字段类型定义,这可能是SQL CREATE table
命令缺少列名的原因。以下是有关osw
表的生成迁移文件的相关部分:
var migrationCommands = [{
{
fn: "createTable",
params: [
"osw",
{
},
{}
]
}
];