【问题标题】:sequelize gives the wrong table namesequelize 给出了错误的表名
【发布时间】:2015-04-17 06:09:11
【问题描述】:

我有一个数据库。我有一个“user”表

我正在尝试使用sequelize 创建我的第一个REST api

但是,当它执行我的查询时,我在控制台中得到以下信息:

SELECT `id`, `username`, `password`, `name`, `organization_id`, `type_id`, `join_date` FROM `users` AS `user` WHERE `user`.`id` = '1';

如您所见,它尝试使用名为 users 的表,但该表不存在。

这是我的一些代码:

如果您需要更多,请告诉我,我不确定哪里出了问题? :S

    var User = sequelize.define('user', {
    id: DataTypes.INTEGER,
    username: DataTypes.STRING,
    password: DataTypes.STRING,
    name: DataTypes.STRING,
    organization_id: DataTypes.INTEGER,
    type_id: DataTypes.INTEGER,
    join_date: DataTypes.STRING

}, {
    instanceMethods: {
        retrieveAll: function(onSuccess, onError) {
            User.findAll({}, {raw: true})
                .ok(onSuccess).error(onError);
        },
        retrieveById: function(user_id, onSuccess, onError) {
            User.find({where: {id: user_id}}, {raw: true})
                .success(onSuccess).error(onError);
        },
        add: function(onSuccess, onError) {
            var username = this.username;
            var password = this.password;

            var shasum = crypto.createHash('sha1');
            shasum.update(password);
            password = shasum.digest('hex');

            User.build({ username: username, password: password })
                .save().ok(onSuccess).error(onError);
        },
        updateById: function(user_id, onSuccess, onError) {
            var id = user_id;
            var username = this.username;
            var password = this.password;

            var shasum = crypto.createHash('sha1');
            shasum.update(password);
            password = shasum.digest('hex');

            User.update({ username: username,password: password},{where: {id: id} })
                .success(onSuccess).error(onError);
        },
        removeById: function(user_id, onSuccess, onError) {
            User.destroy({where: {id: user_id}}).success(onSuccess).error(onError);
        }
    }
});

【问题讨论】:

  • 为了清楚起见,“用户”表实际上是否已经存在于您的数据库中?你是手动创建的还是 Sequelize 创建的?
  • @HeadCode 用户表存在于我的数据库中并且是手动创建的并且已经包含大量数据
  • 我没有意识到这一点,但“用户”看起来是一个保留关键字。我不能说这会给您带来问题,但请查看这篇文章:stackoverflow.com/questions/21114499/…

标签: mysql node.js rest express sequelize.js


【解决方案1】:

要解决您的问题,您需要在选项对象中设置 freezeTableName = true。

例如

    var User = sequelize.define('user', {
    id: DataTypes.INTEGER,
    username: DataTypes.STRING,
    password: DataTypes.STRING,
    name: DataTypes.STRING,
    organization_id: DataTypes.INTEGER,
    type_id: DataTypes.INTEGER,
    join_date: DataTypes.STRING

}, {
    freezeTableName: true,
    instanceMethods: {
        retrieveAll: function(onSuccess, onError) {
            User.findAll({}, {raw: true})
                .ok(onSuccess).error(onError);
        },
        retrieveById: function(user_id, onSuccess, onError) {
            User.find({where: {id: user_id}}, {raw: true})
                .success(onSuccess).error(onError);
        },
        add: function(onSuccess, onError) {
            var username = this.username;
            var password = this.password;

            var shasum = crypto.createHash('sha1');
            shasum.update(password);
            password = shasum.digest('hex');

            User.build({ username: username, password: password })
                .save().ok(onSuccess).error(onError);
        },
        updateById: function(user_id, onSuccess, onError) {
            var id = user_id;
            var username = this.username;
            var password = this.password;

            var shasum = crypto.createHash('sha1');
            shasum.update(password);
            password = shasum.digest('hex');

            User.update({ username: username,password: password},{where: {id: id} })
                .success(onSuccess).error(onError);
        },
        removeById: function(user_id, onSuccess, onError) {
            User.destroy({where: {id: user_id}}).success(onSuccess).error(onError);
        }
    }
});

【讨论】:

  • 哇,我已经非常接近解决这个问题了,我只是将那行插入错误的位置,谢谢!
  • 感谢您为我们指明了正确的方向,但上面的实际语法不正确:freezeTableName = true 应该是 freezeTableName: true
【解决方案2】:

我之前没有使用过 sequelize,但是从他们的文档中阅读 - 可能你错过了 -

User.sync({force: true}).then(function () { // Table created return User.create({ firstName: 'John', lastName: 'Hancock' }); });

即表创建部分...

谢谢

【讨论】:

  • 不使用“user”表,而是创建了一个名为“users”的表
猜你喜欢
  • 1970-01-01
  • 2017-08-18
  • 1970-01-01
  • 2017-04-20
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-03
相关资源
最近更新 更多