最近做些数据库迁移工作, 从django到meteor
以前采用主要两种办法:
- 先用Datagrip 先把需要的表导出 json 文件,然后在meteor框架内,用JSON.parse() 方法解析出来,单表好搞,但如果跨两到三张表以上的关联,就有些繁琐,而且代码不好复用。
- 采用django 的 rest_framework (http://www.django-rest-framework.org/) , 需要那些数据就REST出来后,再写入meteor 的数据库内
总之,两种方法都要写代码,效率不高
于是乎,咱就干脆直接读库吧,步骤如下:
- 先安装sqlite3的npm包
运行: meteor npm install –save sqlite3 - 把sqlite数据库拷贝到meteor框架内,(代码内我的是dev.db文件)
请注意:最好放在这个目录下 .meteor/local/build/programs/server/
本想更优雅一些,放在项目根目录的private 文件夹内,后来发现Assets类的几个方法如getText()等都是读内容的?还是算了吧,实现为先,代码如下:
var sqlite3 = require('sqlite3').verbose();
// 连接数据库
var dbFile = './dev.db';
var db = new sqlite3.Database(dbFile);
// 显示数据库的表结构
db.each("SELECT name FROM sqlite_master WHERE type='table'", function
(err, row) {
console.log(row.name);
});
db.close();
ok, 大工就告成了, so easy
如果还需要对数据库进行CURD操作,最好使用prepare方法,参看
https://github.com/mapbox/node-sqlite3 上的例子即可:
db.serialize(function() {
db.run("CREATE TABLE lorem (info TEXT)");
var stmt = db.prepare("INSERT INTO lorem VALUES (?)");
for (var i = 0; i < 10; i++) {
stmt.run("Ipsum " + i);
}
stmt.finalize();
db.each("SELECT rowid AS id, info FROM lorem", function(err, row) {
console.log(row.id + ": " + row.info);
});
});
db.close();