nodejs+sequelize操作mysql資料庫

來源:互聯網
上載者:User

標籤:class   建立   failed   install   安裝   sqlite   comm   return   load   

 

前言:

本人對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: ‘111111‘,        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資料庫

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.