17

我是续集和 Node.js 的新手。
我为测试续集编码,但发生错误“ER_NO_SUCH_TABLE:表'db.node_tests'不存在”
错误很简单。
但是,我想从“ node_test ”表中获取数据。
我认为 sequelize 附加了 's' 字符。

有我的源代码。

var Sequelize = require('sequelize');

var sequelize = new Sequelize('db', 'user', 'pass');
var nodeTest = sequelize.define('node_test',
        { uid: Sequelize.INTEGER 
         , val: Sequelize.STRING} );

nodeTest.find({where:{uid:'1'}})
    .success(function(tbl){
        console.log(tbl);
    });

我已经创建了表“node_test”,并使用 mysql 客户端插入了数据。

我误解了用法吗?

4

5 回答 5

16

我找到了我自己的问题的答案。

我在后面附加了 Sequelize 方法选项。{define:{freezeTableName:true}}

然后 sequelize 不在表名后附加 's' 字符。

于 2012-12-22T23:10:01.133 回答
12

虽然答案很好,但我现在建议tableName在声明模型时使用该选项:

sequelize.define('node_test', { 
  uid: Sequelize.INTEGER,
  val: Sequelize.STRING
}, {
   tableName: 'node_test'
});

http://docs.sequelizejs.com/manual/tutorial/models-definition.html

于 2013-11-27T06:49:43.140 回答
6

Sequelize 默认使用传递的模型名称的复数形式。因此它将查找表“node_tests”或“NodeTests”。如果您愿意,它也可以为您创建表格。

nodeTest.sync().success(function() {
  // here comes your find command.
})

如果该表尚不存在,同步将尝试创建该表。您还可以使用 删除现有表并从头开始创建一个新表sync({ force: true })。检查命令行上的 SQL 命令以获取有关正在发生的事情的更多详细信息。

于 2012-12-22T13:41:55.003 回答
2

为现有表定义模型时,需要为 sequelize设置两个选项:

  1. 按原样找到您的表名,然后
  2. 不必担心它所期望的 sequelize 的默认列updatedAtcreatedAt

只需像这样添加两个选项:

var nodeTest = sequelize.define('node_test',
        { uid: Sequelize.INTEGER , val: Sequelize.STRING},
        { freezeTableName: true , timestamps: false} //add both options here
);

注意选项参数:

    sequelize.define('name_of_your_table',
    {attributes_of_your_table_columns},
    {options}
     );

在使用诸如 nodeTest 之类的 sequelize 方法时,缺少任何一个选项都会触发相应的错误。查找所有()

> ER_NO_SUCH_TABLE    //freezeTableName
> ER_BAD_FIELD_ERROR  //timestamps

或者,您可以:

  1. 通过 sequelize 创建一个新表。它会将“s”附加到表名并创建两个时间戳列作为默认值或
  2. 使用sequelize-auto,一个很棒的 npm 包,以编程方式从现有数据库生成续集模型。

这是选项配置的 sequelize文档

于 2017-01-21T20:20:23.920 回答
1

在我的情况下,这是由于情况。我有:

sequelize.define('User', {

正确的方法是使用小写:

sequelize.define('user', {
于 2020-04-20T21:25:56.177 回答