世界上最伟大的投资就是投资自己的教育
node-db-migrate 入门教程
1. 介绍
我是一个 rails 程序员,最近在学习 nodejs 方面的开发,准备做一个项目之前,可能需要创建数据库方面的东西,比如创建一些表,可能还会添加一些字段,加上索引等。如果你也是一个 rails 程序员,你肯定对migration这个东西不陌生,它可以被翻译为"迁移",不过它不是把数据库的数据从一个地方迁移到另一个地方,而是在开发过程中,能够管理你的数据库改变工作,就是用工具和代码来管理数据库改变,比如,你现在要添加一张 users 表,你可以会运行下面的命令:
$ rails g migration create_users name:string email:string
它会生成一个文件,也叫迁移脚本,它的内容如下:
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :name
t.string :email
end
end
end
之后运行命令bundle exec rake db:migrate
就会在数据库中添加一张 users 表,字段分别为 name 和 email。
这样的方式是最好的,因为也适合在生产环境上不断地增量修改数据库,也能把修改的内容以迁移脚本的形式保留下来,方便维护查看,至少比那种手动修改数据库的 low 方式好多了,那种改了之后,还生成一个 sql 脚本,让你导,实在太 low 了。
然后,这节的重点不是 rails,而是 nodejs,它也有这样的工具,我找到了一个,一直在更新,且是比较好的,介绍给大家使用。
https://github.com/db-migrate/node-db-migrate
2. 安装
首先来安装,安装很简单,先确保你电脑上有 npm 吧,这是最基本的。
$ npm install -g db-migrate
安装完之后,就可以使用db-migrate
命令了。
3. 使用
首先创建一个文件database.json
,这个文件是放数据库配置的,你的数据库账号名和密码都是放在上面的。
接着创建一个migrations
目录,它是放迁移脚本的。
打开database.json
文件,添加内容如下:
{
"dev": {
"driver": "pg",
"user": "hfpp2012",
"password": "",
"host": "localhost",
"schema": "public"
}
}
其中dev
是指开发环境,这个名称是可以修改的,默认就是dev
开发环境,也就是说,你如果不指定命令参数运行的话 (下面会提到),就是这个环境,除此之外,还有两个环境test
, prod
,分别代表测试环境和生产环境,这点跟 rails 的是没多大区别的。
user
和password
当然分别是你的数据库的用户名和密码了,你填上你自己的,driver
是数据库驱动,pg
代表的是 postgresql 数据库。
当然你也可以使用其他的数据库,详情可查看这篇文档:https://db-migrate.readthedocs.io/en/latest/Getting%20Started/configuration/
使用 pg 数据库,还需要安装另一个工具:
$ npm install -g db-migrate-pg
现在我们先来创建一个数据库,执行下面的命令:
$ db-migrate db:create koa_dev
会这样输出:
[INFO] Created database "koa_dev"
创建成功了,创建的数据库名称为koa_dev
。
再把刚才的数据库名称写到database.json
配置文件中。
{
"dev": {
"driver": "pg",
"user": "hfpp2012",
"password": "",
"host": "localhost",
"database": "koa_dev",
"schema": "public"
}
}
现在我们就可以在上面创建表之类的,先创建一个迁移脚本。
$ db-migrate create create-users
create-users
是你迁移脚本的名称,你可以改成你自己需要的,只要语义化就好,比如add_phone_to_users
,很容易看出是添加一个叫phone
的字段给users
表。
会输出如下信息:
[INFO] Created migration at /Users/hfpp2012/codes/koa/migrations/20161221080001-create-users.js
打开这个文件,修改内容如下:
exports.up = function(db) {
return db.createTable('users', {
id: { type: 'int', primaryKey: true },
name: 'string',
email: 'string'
});
};
exports.down = function(db) {
return db.dropTable('users');
};
其中,id 为整型类似,为主键,还有两个字段分别是前面提到的name
和email
。
再执行以下命令,执行这个迁移脚本。
$ db-migrate up
你可以进数据库查看效果,是不是生成了这张表,我是在 mac 下。
$ psql koa_dev
# 之后执行` \d users`命令
koa_dev=# \d users;
Table "public.users"
Column | Type | Modifiers
--------+-------------------+-----------
id | integer | not null
name | character varying |
email | character varying |
Indexes:
"users_pkey" PRIMARY KEY, btree (id)
创建成功了!
如果这个时候你发现创建的表不对,要重新创建,你可以回退,只要执行下面这个命令即可。
$ db-migrate down
再进入数据库查看。
koa_dev=# \d users;
Did not find any relation named "users".
表被删除掉了,你现在可以修改一下迁移脚本,再次执行db-migrate up
就又可以创建 users 表。
更多的命令可以查看这篇文档,比如,你要重做,回退到某个版本,你有需要的时候就去查看吧。
上面的users
表有一个 int 类似的字段 id,也有 string 类型的字段name
和email
,其实 string 类型就是 varchar。如果还需要其他类似的字段,就查看这个文件,里面都有,https://github.com/db-migrate/shared/blob/master/data_type.js。
创建表你学会了,那如果要添加一个字段,或修改表名,或添加索引,也是一样的,参考这篇文章:https://db-migrate.readthedocs.io/en/latest/API/SQL/。
比如这样:
exports.up = function(db) {
return db.createTable('regional_designs', {
id: { type: 'int', primaryKey: true },
name: 'string',
type: 'string',
pos_x: 'int',
pos_y: 'int',
parent_id: 'int',
drug_id: 'int',
created_at: 'timestamp',
updated_at: 'timestamp'
}).then(
function(result) {
db.addIndex('regional_designs', 'regional_designs_parent_id_key', ['parent_id'], function(err) {
return;
});
},
function(err) {
return;
}
).then(
function(result) {
db.addIndex('regional_designs', 'regional_designs_drug_id_key', ['drug_id'], function(err) {
return;
});
},
function(err) {
return;
}
);
};
exports.down = function(db) {
return db.dropTable('regional_designs');
};
完结。
本站文章均为原创内容,如需转载请注明出处,谢谢。
© 汕尾市求知科技有限公司 | Rails365 Gitlab | 知乎 | b 站 | csdn
粤公网安备 44152102000088号 | 粤ICP备19038915号
Top