我有一个sql文件,我在其中写入要在发布中运行的语句,该文件包含如下语句:
-- =======================2019-02-01=======================
UPDATE rating set stars = 3 where id = 6;
UPDATE users SET status = 'A' where last_login >= '2019-01-01';
INSERT INTO....
-- =======================2019-02-15=======================
UPDATE rating set stars = 3 where id = 6;
UPDATE users SET status = 'A' where last_login >= '2019-01-01';
INSERT INTO....
我在每个发布日期运行特定的句子,但是我认为这是一种不好的做法,而且没有可升级的方法。
我正在尝试将此方法更改为Knex种子或迁移。最佳做法是什么?
种子有问题,因为knex每次我写命令knex seed:run
都会执行种子,并且显示一些错误。
答案 0 :(得分:2)
Knex存储了已执行内容的文件名和签名,因此无需再次运行它们。
https://knexjs.org/#Installation-migrations
通过编程,您可以执行以下迁移:
knex({..config..}).migrate.latest({
directory: 'migrations', // where the files are stored
tableName: 'knex_migrations' // where knex saves its records
});
示例迁移文件
exports.up = function(knex) {
return knex.raw(`
UPDATE rating set stars = 3 where id = 6;
UPDATE users SET status = 'A' where last_login >= '2019-01-01';
INSERT INTO....
`)
};
文件将按字母顺序/按顺序执行,并且不会针对同一数据库重新执行。