用 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();
    原文作者:林慕空
    原文地址: https://www.jianshu.com/p/73c5002353c2
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞