用 meteor 直接訪問 sqlite 數據庫

最近做些數據庫遷移工作, 從django到meteor
以前采用主要兩種辦法:

  1. 先用Datagrip 先把需要的表導出 json 文件,然后在meteor框架內,用JSON.parse() 方法解析出來,單表好搞,但如果跨兩到三張表以上的關聯,就有些繁瑣,而且代碼不好復用。
  2. 采用django 的 rest_framework (http://www.django-rest-framework.org/) , 需要那些數據就REST出來后,再寫入meteor 的數據庫內

總之,兩種方法都要寫代碼,效率不高
于是乎,咱就干脆直接讀庫吧,步驟如下:

  1. 先安裝sqlite3的npm包
    運行: meteor npm install --save sqlite3
  2. 把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();
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容