为Node.js添加后缀:ER_NO_SUCH_TABLE
我是新来的sequelize和Node.js。
我编码testingsequelize,但错误发生“ER_NO_SUCH_TABLE:表'db.node_tests'不存在”
错误非常简单。
但是,我想从“ node_test ”表中获取数据。
我认为续集是附加“性”的。
有我的源代码。
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); });
我已经创build了表“node_test”,并使用mysql客户端插入数据。
我误解了用法吗?
我find了答案我自己的问题。
我追加了Sequelize方法选项。 {define:{freezeTableName:true}}
然后在表名后面加上“s”字符。
Sequelize默认使用传入的模型名称的复数forms。 所以它会查找表“node_tests”或“NodeTests”。 也可以为你创build表格,如果你想要的话。
nodeTest.sync().success(function() { // here comes your find command. })
同步将尝试创build表,如果它不存在。 您也可以使用sync({ force: true })
删除现有表并从头创build一个新表。 检查命令行上的SQL命令以获取有关正在进行的操作的更多详细信息。
虽然答案很好,但我现在推荐在声明模型时使用tableName
选项:
sequelize.define('node_test', { uid: Sequelize.INTEGER, val: Sequelize.STRING }, { tableName: 'node_test' });
当您将模型定义到现有表格时,您需要设置两个选项来进行后续处理:
- 按原样查找您的表名
- 不要担心它所期望的updatedAt和createdAtquize的默认列。
简单地添加这样的选项:
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方法时,缺less任一选项都会触发相应的错误。 findAll() 。
> ER_NO_SUCH_TABLE //freezeTableName > ER_BAD_FIELD_ERROR //timestamps
或者,您可以:
- 通过续集创build一个新表。 它会将“s”附加到表名中,并创build两个时间戳列作为默认值或
- 使用sequelize-auto ,一个很棒的npm包以编程方式从现有的数据库生成序列化模型。
以下是选项configuration的续集文档 。
- 在loopback和mongo中同样的“find”查询在不同的服务器上有不同的行为
- cordova/离子应用程序通过服务器签名的url上传base64图像到S3
- node-mongodb防止websocket数据丢失
- Twilio客户端错误:使用AWS Lambda / AWS API网关进行Twilio IP消息传递
- Node Express – Http post来返回文件
- 用双引号replace.toString()单引号
- AWS Elastic Beanstalk:我是否必须使用完整的“/ node_modules”和“/ bower_components”来部署我的应用程序,并编译sass和其他依赖项?
- Gulp运行在windows |上运行失败 错误消息:Microsoft JScript编译错误,无效的字符
- Nodejs / express,优雅地closures