Node.js 使用sync时将定义表多元化
我编写了迁移来在单独的服务中定义我的表。然后,我使用node.js服务运行sequelize,在这里我定义的模型如下:Node.js 使用sync时将定义表多元化,node.js,postgresql,sequelize.js,Node.js,Postgresql,Sequelize.js,我编写了迁移来在单独的服务中定义我的表。然后,我使用node.js服务运行sequelize,在这里我定义的模型如下: import Sequelize from "sequelize"; import sequelize from "../config/sequelize"; export const MasterPlaylist = sequelize.define("Master_playlist", { id: { typ
import Sequelize from "sequelize";
import sequelize from "../config/sequelize";
export const MasterPlaylist = sequelize.define("Master_playlist", {
id: { type: Sequelize.STRING, primaryKey: true },
updated_at: {
type: Sequelize.DATE,
defaultValue: new Date(),
allowNull: false,
},
});
然后我导入这个并这样称呼它:
import Sequelize from "sequelize";
import sequelize from "./config/sequelize";
import { Label } from "./models/Label";
async function run(){
await sequelize.sync();
const label = await Label.findOne();
console.log("done", label);
}
run()
这里稍微简化了一些事情,但这是正在运行的。
当我运行这个程序时,它会创建新的表,但会进行多元化,因此我最终会得到迁移插入的正确命名的表,然后是多元化的副本
例如,对于这个表,我以“Master_播放列表”结束
有人知道这里发生了什么吗
这是我的配置文件:
import Sequelize from "sequelize";
const sequelize = new Sequelize(
process.env.DB,
process.env.USERNAME,
process.env.PASSWORD,
{
host: process.env.HOST,
dialect: "postgres",
}
);
async function run() {
await sequelize.authenticate();
}
run();
export default sequelize;
不完全确定问题出在哪里,但sequelize使用复数表名 默认情况下,如果未指定表名,Sequelize会自动将模型名加成复数,并将其用作表名。这种复数化是由一个名为屈折的库在后台完成的,这样就可以正确计算不规则复数(如person->people) 您可以使用
freezeTableName:true
直接控制表名,这将保持表名与模型名相同:
sequelize.define('User', {
// ... (attributes)
}, {
freezeTableName: true
});
或显式指定表名:
sequelize.define('User', {
// ... (attributes)
}, {
tableName: 'users'
});