我一直试图为我的项目写一些种子,但我遇到了一些障碍.
我many-to-many与我users和roles桌子有关系.因此,当我播种数据库时,我需要将一个带有正确ID的记录添加到我的连接表中.为了做到这一点,我需要找到用户email和角色,name并得到ids这个问题.我在sequelize网站上找不到任何好的文档.我正在使用sequelize-cli进行播种和迁移.我得到一个参数a queryInterface,但我找不到任何例子或提到这件事实际上可以做什么.只是一些简单的例子让我通过迁移(某种方式)和我能够在谷歌上找到的东西.
我通过使用"肮脏的伎俩"解决了这个问题我会说......
// user_seeds.js
up: function (queryInterface, Sequelize) {
return queryInterface.bulkInsert(table, [{
id: 1,
name: 'John doe',
email: 'john@doe.com',
created_at,
updated_at
}], {});
// roles_seeds.js
up: function (queryInterface, Sequelize) {
return queryInterface.bulkInsert(table, [{
id: 1,
name: 'admin',
created_at,
updated_at
}, {
id: 2,
name: 'user',
created_at,
updated_at
}]);
//user_roles_seeds.js
up: function (queryInterface, Sequelize) {
return queryInterface.bulkInsert(table, [{
employee_id: 1,
role_id: 1 …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Sequelize构建一个简单的Node/Express应用程序,但是当我尝试在我的关系数据库中创建一个新记录时,我收到错误Unhandled rejection SequelizeDatabaseError: SQLITE_ERROR: no such table: main.User.基本上,我在Users表中创建一个用户,然后尝试在表中创建一个相关的地址Addresses- 用户已成功创建但在创建地址时失败并出现此错误...其中是main从表名中获取前缀?(下面的完整错误读数)...
首先,这是我的计划的简要介绍......
我的Sequelize版本是Sequelize [Node: 6.8.1, CLI: 2.4.0, ORM: 3.29.0],我使用Sequelize CLI命令sequelize init来设置我项目的这一部分.
我使用SQLite3进行本地开发,并且config/config.json我将开发数据库定义为
"development": {
"storage": "dev.sqlite",
"dialect": "sqlite"
}
Run Code Online (Sandbox Code Playgroud)我的用户迁移:
'use strict';
module.exports = {
up: function(queryInterface, Sequelize) {
return queryInterface.createTable('Users', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
first_name: {
type: Sequelize.STRING
},
last_name: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: …Run Code Online (Sandbox Code Playgroud)我目前正在尝试使用 sequelize 为 postgresql 数据库播种,我在我的模型上声明了钩子,在创建单独的记录(例如测试)时可以正常工作
我的种子文件中的数据是否需要在最终表格中显示,或者我可以在创建时调用钩子吗?
这是我的文件:
/*users-seed.js*/
'use strict'
module.exports = {
up: function (queryInterface, Sequelize) {
return queryInterface.bulkInsert('Users', [/*users-data*/])
},
down: function (queryInterface, Sequelize) {
return queryInterface.bulkDelete('Users', null, {})
}
}
Run Code Online (Sandbox Code Playgroud)
和
/*user.js*/
module.exports = function (sequelize, DataTypes) {
let User = sequelize.define('User', {
/* user attributes */
}, {
instanceMethods: {
hashPassword: function (password) {
return bcrypt.hash(password, 15)
},
hashEmail: function (email) {
return crypto.createHash('sha256').update(email).digest('hex')
}
},
hooks: {
beforeCreate: function (user) {
return user.hashPassword(user.password_digest).then(function (hashedPassword) { …Run Code Online (Sandbox Code Playgroud) 通过 sequilize-cli 文件结构访问 sequelize 迁移文件有很多帖子。但是,如果我不使用 sequilize-cli,如何找到迁移文件?
我正在使用 gulp 任务来迁移数据库。出于测试目的,我使用了不同的数据库。所以我需要完全相同的数据库。我正在尝试使用 sequelize.sync({ force: true }) 但它不起作用。
我在门户模型中有我的所有模型。这是代码:
const models = require('portal-models');
gulp.task('migrate', ['create-database'], (done) => {
models.sequelize.query('SET FOREIGN_KEY_CHECKS = 0')
.then(() => models.sequelize.sync({ force: true, alter: true }))
....
....
....
)
Run Code Online (Sandbox Code Playgroud)
使用 Force: true 它应该可以工作,但对我来说,我收到错误,例如 mydatbaseName.tablename 不存在。
我创建了新的测试数据库。我不想在测试数据库中手动创建所有内容,所以我正在使用迁移,但我的 gusse 同步无法正常工作。
谁能告诉我,我应该遵循什么?
提前致谢。
我试图在批量创建/插入新报告之前删除所有报告详细信息。问题是当bulkCreate出现错误时它不会回滚。它应该带回被破坏的report_details,但它不起作用。
我测试此事务代码的方式是插入report_details,然后手动更改一个列名称,以便再次插入时会出现列错误。并且事务应该回滚,但实际上report_details被破坏,并且在bulkCreate错误时它不会带回被破坏的report_details,有人可以看一下我的代码。我在谷歌上搜索我的语法是正确的。以及如何在我的机器上测试交易?除了更改列名之外还有其他方法会产生错误吗?
function saveReportsDetails(results) {
db.report_detail.bulkCreate(results.report.objAllReportsDetail);
return db.snpreq.transaction(t => {
// transaction block
return db.report_detail.destroy({
where: {
profile_id: results.profile.data[0].id
}
}, {
transaction: t
}).then(deleted => {
console.log('*******TRANSACTION DELETED*********');
return db.twenreport_detail.bulkCreate(results.report.objAllReportsDetail, {
transaction: t
}).then(reports_created => {
console.log('*******TRANSACTION bulk created*********');
});
});
}).then(transaction => {
console.log('********All Transaction********');
}).catch(err => {
console.log('*******ROLL BACK*********');
});
}
Run Code Online (Sandbox Code Playgroud) postgresql transactions sequelize.js mean-stack sequelize-cli
环境:
模型:
'use strict';
module.exports = function(sequelize, DataTypes) {
var test = sequelize.define('test', {
id: DataTypes.UUID,
type: DataTypes.STRING,
data: DataTypes.JSON,
}, {
'createdAt': {
type: Sequelize.DATE(3),
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP(3)'),
},
'updatedAt': {
type: Sequelize.DATE(3),
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3)'),
},
classMethods: {
associate: function(models) {
// associations can be defined here
}
}
});
return test;
}
Run Code Online (Sandbox Code Playgroud)
移民:
'use strict';
module.exports = {
up: function(queryInterface, Sequelize) {
return queryInterface.addColumn('test', {
test_col: {
type: Sequelize.JSONB
}
});
}, …Run Code Online (Sandbox Code Playgroud) 当我运行sequelize-cli命令时发生sequelize db:seed:all
当我尝试将对象作为 JSON 播种时,出现以下错误:
ERROR: Invalid value { viewId: null,
dateRanges: [ { startDate: null, endDate: null } ],
samplingLevel: 'DEFAULT',
dimensions: [ { name: 'ga:channelGrouping' } ],
metrics: [ { expression: 'ga:users' } ] }
Run Code Online (Sandbox Code Playgroud)
这是我的模型
module.exports = (Sequelize, DataTypes) => {
const Report = Sequelize.define('Report', {
name: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
validate: {
is: /^[a-z0-9\_\-]+$/i,
},
},
platform: {
type: DataTypes.STRING,
allowNull: false,
validate: {
is: /^[a-z0-9\_\-]+$/i,
},
},
query: {
type: DataTypes.JSON, …Run Code Online (Sandbox Code Playgroud) 我使用 sequelize 创建了一个带有时间戳的表。当我更新表时,它会自动更新时间戳(即 createdAt 和 updatedAt)。但这些时间与我的当地时间不同。如果我使用 moment 像这样转换时区,我附上了 2 个带有模型脚本的屏幕截图,updateddAt: moment().utc(new Date())它工作正常。有没有办法用当前时区自动更新时间戳?
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('States', {
hashCode: {
type: Sequelize.STRING,
unique:true,
autoIncrement:false
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('States');
}
};
Run Code Online (Sandbox Code Playgroud)
有人可以建议我如何在同一个表中的两列上设置主键。
var relation = {
'user_id': {
type: DataTypes.INTEGER
},
'organization_id':{
type: DataTypes.INTEGER
}
}
Run Code Online (Sandbox Code Playgroud)
我想定义一个主键 primary key (user_id, organization_id)
注意:使用 PostgreSQL
sequelize-cli ×10
sequelize.js ×10
node.js ×6
postgresql ×5
express ×1
gulp ×1
mean-stack ×1
momentjs ×1
orm ×1
sqlite ×1
timestamp ×1
timezone ×1
transactions ×1