如何解决在使用同步时对定义表进行序列化
我编写了迁移程序,以在单独的服务中定义表。我然后使用node.js服务在我定义模型的地方运行sequelize:
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_playlists”结尾
有人知道这里发生了什么吗?
这是我的配置文件:
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使用inflection来使表名复数。
默认情况下,当未提供表名时,Sequelize会自动将模型名复数并将其用作表名。这种复数是通过一个称为“拐点”的库在后台进行的,因此可以正确计算不规则的复数(例如人->人)。
您可以直接使用freezeTableName: true
控制表名,这将使表名与模型名相同:
sequelize.define('User',{
// ... (attributes)
},{
freezeTableName: true
});
或明确指定表名:
sequelize.define('User',{
tableName: 'users'
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。