最近做些數據庫遷移工作, 從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();