sequelize的使用

2020-01-21  本文已影响0人  卡布i

sequelize的使用

与数据库交互有两种方法:

使用数据库的原生查询语言(例如SQL) 使用对象数据模型(Object Data Model,简称 ODM)或对象关系模型(Object Relational Model,简称 ORM)。 ODM / ORM 能将网站中的数据表示为 JavaScript 对象,然后将它们映射到底层数据库。一些 ORM 只适用某些特定数据库,还有一些是普遍适用的。 使用 SQL 或其它受到支持的查询语言才能达到最佳性能。ODM 通常慢一些,因为在对象和数据库格式之间存在一层用于映射的翻译代码,使它不一定会选用最高性能的数据库查询(尤其是普遍使用级别的 ODM,它必须在各类数据库功能方面做出更大的折衷)。

使用 ORM 的好处是:程序员可以继续用 JavaScript 对象的思维而不用转向数据库语义的思维。 在(同一个或不同网站)使用不同数据库时尤为明显。使用 ORM 还可以更方便地对数据进行验证和检查。

Sequelize:Sequelize是一款基于Nodejs功能强大的异步ORM框架。 同时支持PostgreSQL, MySQL, SQLite and MSSQL多种数据库,很适合作为Nodejs后端数据库的存储接口,为快速开发Nodejs应用奠定扎实、安全的基础

本文基于sqlite

SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库。

就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。

安装sequelize

Sequelize 可通过 npm ( 或 yarn ) 获得. 中文文档

npm install sequelize

你还需要手动安装对应的数据库驱动程序:

# 选择对应的安装:
$ npm install --save pg pg-hstore # Postgres
$ npm install --save mysql2
$ npm install --save mariadb
$ npm install --save sqlite3
$ npm install --save tedious # Microsoft SQL Server

建立连接(sqlite)

要连接到数据库,你必须创建 Sequelize 实例. 这可以通过将连接参数分别传递给 Sequelize 构造函数或传递单个连接 URI 来完成:

var path = require('path')
const Sequelize = require("sequelize");

const sequelize = new Sequelize(undefined, undefined, undefined, {
  host: "localhost",
  dialect: "sqlite",
  storage: path.join(__dirname,"../database/database.sqlite") //数据存放路径
});

测试连接

你可以使用 .authenticate() 函数来测试连接.

// 在model文件下输入node note.js测试数据库链接是否成功

sequelize
  .authenticate()
  .then(() => {
    console.log("Connection has been established successfully.");
  })
  .catch(err => {
    console.error("Unable to connect to the database:", err);
  });

表建模

模型是一个扩展 Sequelize.Model 的类. 模型可以用两种等效方式定义. 第一个是Sequelize.Model.init(属性,参数):

const Model = Sequelize.Model;
class User extends Model {}
User.init({
  // 属性
  firstName: {
    type: Sequelize.STRING,
    allowNull: false
  },
  lastName: {
    type: Sequelize.STRING
    // allowNull 默认为 true
  }
}, {
  sequelize,
  modelName: 'user'
  // 参数
});

另一个是使用 sequelize.define:

const Note = sequelize.define("note", {
  text: {
    type: Sequelize.STRING,
    allowNull: false
  }
});

在内部, sequelize.define 调用 Model.init.

上面的代码告诉 Sequelize 在数据库中期望一个名为 users 的表,其中包含 firstName 和 lastName 字段.

// 注意:使用{force:true}每次存数据前都将删除之前同名的文件
Note.sync({force:true})
  .then(() => {
    Note.create({
      text: "数据库里的数据"
    });
  })

查询

// 查找所有用户
// {raw: true} 
User.findAll().then(users => {
  console.log("All users:", JSON.stringify(users, null, 4));
});
// {raw: true}找到的结果显示原始数据,效果类似JSON.stringify
// 创建新用户
User.create({ firstName: "Jane", lastName: "Doe" }).then(jane => {
  console.log("Jane's auto-generated ID:", jane.id);
});

// 删除所有名为“Jane”的人
User.destroy({
//使用where查找
  where: {
    firstName: "Jane"
  }
}).then(() => {
  console.log("Done");
});

// 更新数据, 将所有没有姓氏的人改为“Doe”
User.update({ lastName: "Doe" }, {
  where: {
    lastName: null
  }
}).then(() => {
  console.log("Done");
});

另外,node.js后台如何调试

如果你在编写Node.js代码,node-inspector是必备之选,比Node.js的内置调试器好出许多。使用起来跟Chrome的javascript调试器很相似。

使用npm安装:

npm install node-inspector

然后需要通过浏览器连接到node-inspector,需要启动inspector服务

node-inspector 

启动, 默认8080端口

最后以debug模式运行node.js应用

node --debug app.js

通过URL http://127.0.0.1:8080/debug?port=5858 就可以进行调试了。

上一篇 下一篇

猜你喜欢

热点阅读