首页 > 解决方案 > Sequelize:检查表是否存在且为空

问题描述

我想检查一个表,如果表为空,则创建一条记录。

我的代码:

module.exports = (sequelize, DataTypes) => {
    const About = sequelize.define("About",
        {
            id: {
                type: DataTypes.BIGINT,
                autoIncrement: true,
                allowNull: false,
                primaryKey: true,
            },
            title: DataTypes.STRING(150),
            content: DataTypes.TEXT("medium"),
        },
        {
            freezeTableName: true,
            timestamps: false,
        },
    );

    About.findAll()
    .then(about => {
        if (about.length === 0) {
            About.create({
                title: "About Us",
                content: "Lorem ipsum dolor sit amet...",
            });
        }
    });

    return About;
};

但是当表不存在时,我收到此错误:

执行(默认): SELECT id, title, contentFROM AboutAS About;

未处理的拒绝 SequelizeDatabaseError:表 'mydb.about' 不存在

我该如何处理这个问题?

标签: mysqlnode.jsdatabasesequelize.js

解决方案


我终于找到了我的问题的答案。

我在查找之前添加.sync()并创建了表。两者都在.findOrCreate()工作.findAll()

module.exports = (sequelize, DataTypes) => {
    const About = sequelize.define("About",
        {
            title: DataTypes.STRING(150),
            content: DataTypes.TEXT("medium"),
        },
        {
            freezeTableName: true,
            timestamps: false,
        },
    );

    About.sync();

    About.findOrCreate({
        where: {id: 1},
        defaults: {
            title: "About Us",
            content: "Lorem ipsum dolor sit amet...",
        },
    });

    return About;
};

推荐阅读