用node操作mysql

128 阅读1分钟

创建一个数据库

登录mysql -u root -p

创建一个数据库CREATE DATABASE NAME

切换数据库use databaseName

用node连接


import mysql from 'mysql'

let connection = mysql.createConnection({
    host: '',
    port: '',
    user: '',
    password: '',
    database: ''
})
// 连接数据库
connection.connect(err=>{
    if (err) throw err
});

// 操作

const sql =''//sql语句

connection.query(sql,(err,res)=>{}) // 使用该方法可以对数据库进行操作。

封装一下

如果使用 mysql.createConnection 连接都需要每次建立连接,操作完释放连接,再次连接。 用mysql.createPool 连接方便

Rather than creating and managing connections one-by-one, this module also provides built-in connection pooling using mysql.createPool(config)Read more about connection pooling.

// 封装数据库操作
const mysql =  require('mysql')
const  config = require('../config/index.js')
// const connection = mysql.createConnection(config.sqlConfig)
// Cannot enqueue Handshake after invoking quit. 解决方法用连接池
const pool = mysql.createPool(config.sqlConfig)
  
  let query = function( sql, values ) {
  
    return new Promise(( resolve, reject ) => {
      pool.getConnection(function(err, connection) {
        if (err) {
          resolve( err )
        } else {
          connection.query(sql, values, ( err, rows) => {
            if ( err ) {
              reject( err )
            } else {
              resolve( rows )
            }
            connection.release()
          })
        }
      })
    })
  
  }

module.exports = {
    query
}

封装后使用

let sql = `select * from tableNmae;`
async function fun (){
const res = await query(sql)
}

一个问题

在表中添加 datetime类型数据,在获取数据时会显示 2002-12-16T00:00:00.00Z 而不是2002-12-16 00:00:00 原本以为需要将字符串拼接,结果看了一下获取的数据类型是object。 查了一下解决方法:在连接数据库时 添加timezone:"SYSTEM"

实际上是数据库时区的设置,将其设置成系统的失去,否则用的是格林威治时间