前言:

本人对mysql不是很熟悉,只会命令行的简单增删改查。有些观点可能不到位请谅解。

sequelize是针对node.js和io.js开发的基于ORM的框架,它支持的数据库包括:PostgreSQL、 MySQL、MariaDB、 SQLite 和 MSSQL。

目录:

1、安装mysql

2、创建目录及文件

3、连接数据库并定义模型

4、操作数据库(增删改查)

5、sequelize框架的API泛解

1.安装mysql

安装环境:win7 x64

  • 先去官网下载最新的版本的mysql,进入官网以后,点击MySQL Community Server,就可以看到mysql最新版本的各种下载版本(如32位还是64位,mis格式后者zip格式)我下载的是5.7.16版本的,zip格式,然后解压即可。
  • 添加环境变量:就是将你解压后的文件bin路径添加到path环境变量中。
  • 打开cmd进入压缩后的bin文件下:

    执行:mysqld --initialize   这个必须要执行,直接初始化mysql,用来生成data文件夹

  • 解压后的文件夹根目录下面有一个配置文件my-default.ini文件:

    basedir 填写你解压后的跟文件路径,如:basedir = "D:\mysql\mysql-5.7.16-winx64"

    datadir  填写你数据文件的路径:如datadir = "D:\mysql\mysql-5.7.16-winx64\data"

    port 一般填3306

    在[mysqld]下面添加:skip-grant-tables  (这句话主要是用来启动mysql省略用户名和密码用的,网上说第一次启动mysql默认是不需要用户名和密码,不过我还是建议你加上这一句,等设置好用户名和密码以后,在去掉这句话)

    修改后,保存。

  • 在bin目录下执行mysqld -install安装mysql
  • 安装成功以后就可以使用net start mysql命令来启动mysql服务器了。
  • mysql服务器启动和停止命令分别是:

    停止:输入 net stop mysql

    启动:输入 net start mysql

  • 进入mysql数据库:

    直接在bin目录下输入mysql,再输入use mysql,即可进入mysql数据库(无需用户名和密码)

  • 设置用户名和密码:

    进入mysql数据库以后,执行:

    update user set authentication_string=password('123456') where user='root' and Host = 'localhost';
    此处设置用户名为root,密码为123456。
  • 退出数据库,执行quit退出,然后将配置文件的skip-grant-tables 这句话注释掉
  • 重启mysql服务,先执行net stop mysql,在执行net start mysql
  • 重新进入mysql数据库,这时就需要用户名和密码了,进入的命令如下:  

    mysql -uroot -p123456

2.创建目录及文件

写一个小案例,实现连接数据库,向表中插入数据,更新表中的数据,查询表中的数据。

采用express框架

工程文件如下:

是通过  express  -e  mysql-demo  直接生成的

新建一个mysql的配置文件:

在工程的根目录下创建config文件夹,config/index.js

在index.js文件中添加如下代码:

'use strict'

var all = {
sequelize:{
username: 'root',
password: '',
database: 'test',
host: "localhost",
dialect: 'mysql',
define: {
underscored: false,
timestamps: true,
paranoid: true
}
}
}; module.exports = all;
定义数据表模型:

在工程根目录下新建model文件夹,model/user.js

在user.js文件中添加如下代码:

'use strict'
module.exports = function(sequelize,DataTypes){
var User = sequelize.define('user',{
id:{
type:DataTypes.UUID,
primaryKey:true,
allowNull:false,
defaultValue:DataTypes.UUIDV1
},
name:{
type:DataTypes.STRING
},
age:{
type:DataTypes.INTEGER
},
height:{
type:DataTypes.INTEGER
},
weight:{
type:DataTypes.INTEGER
}
},{
freezeTableName: true
});
return User;
};
freezeTableName: true  这个选项表示,数据库中的表明与程序中的保持一致,否则数据库中的表名会以复数的形式命名
连接数据库:

在工程根目录下新建sqldb文件夹,sqldb/index.js

在index.js文件中添加如下代码:

'use strict'

var config = require('../config');
var Sequelize = require('sequelize');
var db = {
sequelize:new Sequelize(config.sequelize.database,config.sequelize.username,config.sequelize.password,config.sequelize)
};
db.User = db.sequelize.import('../model/user.js');
module.exports = db;

最后在app.js文件中引入sqldb/index.js文件就完成了数据库的连接和数据表的建立。

在app.js文件加入如下代码:

var sqldb = require('./sqldb');
sqldb.sequelize.sync({force: false}).then(function() {
console.log("Server successed to start");
}).catch(function(err){
console.log("Server failed to start due to error: %s", err);
});
sqldb.sequelize.sync接口用于同步模型到数据库。

4.操作数据库(增删改查)

向user表中插入数据:

在routes/index.js文件中加入如下代码:

router.post('/add/user',function(req,res,next){
console.log("+++++++++++++++++++++++");
var saveUser = {
name:req.body.name,
age:req.body.age,
height:req.body.height,
weight:req.body.weight
}; return db.sequelize.transaction(function(t){
console.log("+++++++++++++++++++");
return User.create(saveUser,{
transaction:t
}).then(function(result){
res.send(result);
}).catch(function(err){
console.log("发生错误:" + err);
});
})
});

查询数据表中的数据(以id字段来查询):

在routes/index.js文件中加入如下代码:

router.get('/get/user/:userid',function(req,res,next){
return db.sequelize.transaction(function(t){
return User.findOne({
id:req.params.userid
},{
transaction:t
}).then(function(result){
res.send(result);
}).catch(function(err){
console.log("发生错误:" + err);
});
});
});

更新数据:

router.post('/update/user/age',function(req,res,next){
return db.sequelize.transaction(function(t){
return User.findById(req.body.userid,{
transaction:t
}).then(function(user){
return user.update({
age:req.body.age
},{
transaction:t
}).then(function(result){
res.send(result);
}).catch(function(err){
console.log("发生错误:" + err);
});
})
})
});

这里有一点,不知道是不是bug,我是先查询,然后再更新,如果以id来查询,查到的一直是数据表中的第一个数据,无赖改成findByid的形式查询就可以了。(如果只查询,不更新的话,采用findOne即可,暂时不知道是什么原因)

5.sequelize框架API泛解

sequelize目前我使用到的api分为两大类,一类属于sequelize,一类属于model。

sequelize类是是引用sequlize模块后获取一个顶级对象,我们通过它来创建sequlize实例,sequelize最常用的API是transaction(启动事物API接口),一般操作表的接口都会先调用这个接口,如上面代码中的:

return db.sequelize.transaction(function(t){
return User.findOne({
......
})
});

要查询表数据,先要调用sequelize的transaction接口来启动事物。

model类API:model类的API主要用于数据表的内部操作。

如findOne,查找数据。

create,插入数据。

demo地址

nodejs+sequelize操作mysql数据库的更多相关文章

  1. 全栈项目|小书架|服务器开发-NodeJS 中使用 Sequelize 操作 MySQL数据库

    安装 官网:https://sequelize.org/v5/manual/getting-started.html 安装sequelize及数据库连接驱动 npm install --save se ...

  2. 使用node js 操作 Mysql 数据库

    使用node js 操作 Mysql 数据库 http://www.nodejs.org/ //node js 数据库操作 MySQL //使用https://github.com/felixge/n ...

  3. PHP操作MySQL数据库5个步骤

    PHP操作MySQL数据库一般可分为5个步骤:1.连接MySQL数据库服务器:2.选择数据库:3.执行SQL语句:4.关闭结果集:5断开与MySQL数据库服务器连接. 1.用mysql_connect ...

  4. python操作mysql数据库的相关操作实例

    python操作mysql数据库的相关操作实例 # -*- coding: utf-8 -*- #python operate mysql database import MySQLdb #数据库名称 ...

  5. 转 用C API 操作MySQL数据库

    用C API 操作MySQL数据库 参考MYSQL的帮助文档整理 这里归纳了C API可使用的函数,并在下一节详细介绍了它们.请参见25.2.3节,“C API函数描述”. 函数 描述 mysql_a ...

  6. PHP操作mysql数据库:[2]查询数据听语音

    本文主要详细讲解如何使用php语言,对mysql数据库进行查询.添加.删除.更新等操作. 工具/原料   Macromedia Dreamweaver 8 mysql数据库,php语言 一.前言   ...

  7. Code First操作Mysql数据库

    前面博客也讲了,自己做一个网站,选用的是MVC+EF Code First+MySql+EasyUI,先说下技术选型.一.为什么选择MVC? 因为之前自己做的系统大部分是webForm,MVC的之前也 ...

  8. JDBC操作MySQL数据库案例

    JDBC操作MySQL数据库案例 import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepared ...

  9. shell脚本操作mysql数据库

    shell脚本操作mysql数据库,使用mysql的-e参数可以执行各种sql的(创建,删除,增,删,改.查)等各种操作 mysql  -hhostname -Pport -uusername -pp ...

随机推荐

  1. 用Java编程找到两个字符串中共有的字符

    这道题的算法思想是把字符串1中的每个字符与字符串2中的每个字符进行比较,遇到共同拥有的字符,放入另一个数组中,最后顺序输出即可 但是这道题的难点在于怎么排除重复的字符 public class bot ...

  2. Scrollview嵌套Listview运行后最先显示出来的位置不在顶部而是中间问题

    问题: Scrollview里面嵌套了一个Listview ,通过设置一个方法设置了Listview的高度,现在的情况就是进到这个界面的时候看到的不是最上面 而是中间 解决办法: 设置ListView ...

  3. Cocos2d-x win7 + vs2010 配置图文详解

    Cocos2d-x win7 + vs2010 配置图文详解 下载最新版的cocos2d-x.打开浏览器,输入cocos2d-x.org,然后选择Download,本教程写作时最新版本为cocos2d ...

  4. CentOS7下安装MySQL5.7安装与配置(转)

    原文地址:http://www.centoscn.com/mysql/2016/0626/7537.html 安装环境:CentOS7 64位 MINI版,安装MySQL5.7 1.配置YUM源 在M ...

  5. C#中页面之间跳转方法比较

    一直以来,各种跳转方法混用,浑浑噩噩没有仔细去了解过每个跳转方法的区别 1.<a herf="default.asp"></a>  超链接跳转 2.< ...

  6. HTML 标签 表格

    <html>    --开始标签 <head> 网页上的控制信息 <title>页面标题</title> </head> <body& ...

  7. ionic2配置问题集

    我在配置ionic2中遇到的问题,及我的解决方案. ionic start MyIonic2Project tutorial --v2 网络很坑爹,配置lantern后,也是多次尝试才下载成功. io ...

  8. WinZip Registry Optimizer 初体验

    WinZip Registry Optimizer是来自著名压缩软件WinZip开发团队的一种可以修复.组织和整理Windows注册表的应用程序,它可以删除无效的注册表条目,整理碎片从而提升系统性能, ...

  9. Enum.GetHashCode()的问题

    先说一下,正常如果代码可以定义成枚举,我是比较倾向于定义成枚举的,类似这样: public enum Gender { /// <summary> /// 男 /// </summa ...

  10. 3.基础点的移动web

    1.移动端的屏幕适配 在Web开发中可以使用px(像素).em.pt(点).in(英寸).cm(厘米)做为长度单位,我们最常用px(像素)做为长度单位. 我们可以将上述的几种长度单位划分成相对长度单位 ...