我刚刚开始使用Sequelize和Sequelize CLI
由于这是一个开发时间,因此经常添加和删除列.将新列添加到现有模型的最佳方法是什么?
例如,我想要一个新的专栏' 完成 '到Todo模型.我将此列添加到models/todo.js.什么是下一步?
我试过了 sequelize db:migrate
不工作:"没有执行迁移,数据库架构已经是最新的."
我正在使用sequelize ORM从PSQL DB中获取数据.但是,当我检索某些内容时,会给出一大堆数据.我想要的唯一数据是'dataValues'.当然,我可以使用object.dataValues.但是,还有其他好的解决方案吗?
我正在使用Sequelize 4.10
我正在创建具有多对多关系的两种类型的玩家和团队的模型和迁移.我正在使用sequelize model:create,但是看不到如何指定外键或连接表.
sequelize model:create --name Player --attributes "name:string"
sequelize model:create --name Team --attributes "name:string"
Run Code Online (Sandbox Code Playgroud)
创建模型后,我添加关联.在播放器中:
Player.belongsToMany(models.Team, { through: 'PlayerTeam', foreignKey: 'playerId', otherKey: 'teamId' });
Run Code Online (Sandbox Code Playgroud)
在团队中:
Team.belongsToMany(models.Player, { through: 'PlayerTeam', foreignKey: 'teamId', otherKey: 'playerId' });
Run Code Online (Sandbox Code Playgroud)
然后运行迁移
sequelize db:migrate
Run Code Online (Sandbox Code Playgroud)
有Player和Team的表,但数据库中没有连接表(也没有外键).如何创建外键和连接表?有没有关于如何做到这一点的权威指南?
我将我的数据库配置保存在 dotenv 文件中。
我正在使用 sequelize 迁移,它在 config 文件夹中有一个 config.json 文件:
{
"development": {
"username": "root",
"password": null,
"database": "test",
"host": "127.0.0.1",
"dialect": "postgres"
},
....
}
Run Code Online (Sandbox Code Playgroud)
由于我在 dotenv 中有配置,所以我必须将其转换为 js 文件:
require('dotenv').config({ silent: env === 'production'})
const devConfig = {
dialect: 'postgres',
host: process.env.DB_HOST || 'localhost',
port: process.env.DB_PORT || 5432,
database: process.env.DB_NAME || '',
username: process.env.DB_USER || 'postgres',
password: process.env.DB_PASSWORD || '',
migrationStorageTableName: 'migrations'
};
module.exports = {
development: devConfig,
production: devConfig
};
Run Code Online (Sandbox Code Playgroud)
但是如何运行配置不是 JSON 的迁移?
node_modules/.bin/sequelize db:migrate --config config/config.js
Run Code Online (Sandbox Code Playgroud) 我已经在Windows 10中安装了Postgres 13。在项目的环境文件中配置了所有正确的凭据。该项目使用以下依赖项,并在 ubuntu 中创建。
"pg": "^7.4.3",
"pg-hstore": "^2.3.2",
"sequelize": "4.38.0",
"sequelize-cli": "^6.2.0"
Run Code Online (Sandbox Code Playgroud)
我正在尝试在 Windows 中设置它。并且在 Windows 10 中出现以下错误。
Error: Unknown authenticationOk message typeMessage { name: 'authenticationOk', length: 23 }
Run Code Online (Sandbox Code Playgroud)
当我点击
npx sequelize db:migrate
终端来迁移数据库中的表时。
我正在使用此命令通过Sequelize CLI创建数据库模型:
sequelize model:create --name User --attributes "firstname:string, lastname:string"
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
},
firstname: {
type: Sequelize.STRING
},
lastname: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: function(queryInterface, Sequelize) {
return queryInterface.dropTable('Users');
}
};
Run Code Online (Sandbox Code Playgroud)
如图所示,主键设置为integer.
有没有办法默认使用CLI UUID?
Sequelize迁移是否应该使您的模型文件与您的数据库保持一致?
我使用sequelize cli来引导一个简单的项目并创建一个模型node_modules/.bin/sequelize model:generate --name User --attributes email:string.我没有问题地迁移了这个.
然后,我创建了以下迁移文件,以向用户电子邮件属性添加notNull约束.
updateEmail迁移
const models = require("../models")
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.changeColumn(models.User.tableName, 'email',{
type: Sequelize.STRING,
allowNull: false,
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.changeColumn(models.User.tableName, 'email',{
type: Sequelize.STRING,
});
},
};
Run Code Online (Sandbox Code Playgroud)
更新了数据库模式以添加约束,但模型文件没有.有没有办法在进行迁移时自动更新模型文件?
我是新手Sequelize,我当前的项目要求我将它与迁移一起使用。我熟悉迁移他们做什么以及如何。我来自Django后台,其中每个子应用程序在同一文件夹中都有模态、视图、api、url 和迁移。我喜欢这种结构,并希望在我的 nodejs 应用程序中保持相同。我想把一个功能放在一个地方。这对我来说更有意义。
我的结构
|---api
|---user
| |--- api.js
| |--- utils.js
| |--- models.js
| |--- index.js
| |--- migrations
| |--- xxx123-migration.js
| |--- xxx1235-migration.js
|---payment
|--- api.js
|--- utils.js
|--- models.js
|--- index.js
|--- migrations
|--- xxx123-migration.js
|--- xxx1235-migration.js
Run Code Online (Sandbox Code Playgroud)
现在我的问题是我不知道如何Sequelize-cli指向我的文件夹并查找要生成和运行的迁移。
Sequelize-cli 为我不想遵循的模型、配置、种子等生成自己的文件夹。
任何帮助表示赞赏。
是否可以使用sequelize-cli仅运行下一个迁移文件?
我一直在浏览cli的文档和帮助部分,它似乎不是这样的功能.
例如,运行sequelize db:migrate:status命令时我有以下内容;
Loaded configuration file "config/config.js".
Using environment "development".
up 20170301090141-create-something.js
up 20170301133113-create-else.js
up 20170301133821-Update-some-stuff.js
up 20170301135339-create-some-model.js
up 20170307152706-update-some-stuff-two.js
down 20170316142544-create-an-index.js
down 20170421112638-do-some-refactor.js
Run Code Online (Sandbox Code Playgroud)
我想只运行20170316142544-create-an-index.js.
当然,我可以删除所有相关文件.然后我逐个添加每个迁移,在每个迁移之间运行"所有"迁移.但这似乎是野蛮的.
我正在尝试使用Node v14.3和来设置项目sequelize。
我不想使用babel-register. 而不是我"type": "module"在我的设置中设置package.json并使用所有 ES6 - ES11 开箱即用的功能。
我还想sequelize-cli用于设置和应用迁移。除了以下命令外,一切正常:
& sequelize db:migrate
Sequelize CLI [Node: 14.3.0, CLI: 5.5.1, ORM: 5.21.11]
Loaded configuration file "config/config.json".
Using environment "development".
== 20200530214311-create-user: migrating =======
ERROR: Must use import to load ES Module: /home/kasheftin/work/tests/chai-http-publication/migrations/20200530214311-create-user.js
require() of ES modules is not supported.
require() of /home/kasheftin/work/tests/chai-http-publication/migrations/20200530214311-create-user.js from /home/kasheftin/.nvm/versions/node/v14.3.0/lib/node_modules/sequelize-cli/node_modules/umzug/lib/migration.js is an ES module file as it is a .js file whose nearest parent package.json …Run Code Online (Sandbox Code Playgroud) sequelize-cli ×10
sequelize.js ×8
node.js ×7
es6-modules ×1
foreign-keys ×1
javascript ×1
join ×1
json ×1
migrate ×1
postgresql ×1
psql ×1