node + sqlite + Sequelize (ORM:Object-Relational Mapping对象关系映射)

https://www.sequelize.cn/

Sequelize 是一个基于 promise 的 Node.js ORM, 目前支持 Postgres, MySQL, MariaDB, SQLite 以及 Microsoft SQL Server. 它具有强大的事务支持, 关联关系, 预读和延迟加载,读取复制等功能。

Sequelize 遵从 语义版本控制。 支持 Node v10 及更高版本以便使用 ES6 功能。

请通过 Getting started – 入门 来学习更多相关内容. 如果你想要学习 Sequelize API 请通过 API 参考 (英文)。

模型基础

在本教程中,你将学习 Sequelize 中的模型以及如何使用它们.

概念

模型是 Sequelize 的本质. 模型是代表数据库中表的抽象. 在 Sequelize 中,它是一个 Model 的扩展类.

该模型告诉 Sequelize 有关它代表的实体的几件事,例如数据库中表的名称以及它具有的列(及其数据类型).

Sequelize 中的模型有一个名称. 此名称不必与它在数据库中表示的表的名称相同. 通常,模型具有单数名称(例如, User),而表具有复数名称(例如, Users),当然这是完全可配置的.

node + sqlite + Sequelize (ORM:Object-Relational Mapping对象关系映射)

db/index.js:

const sqlite3 = require('sqlite3').verbose()
const { getValuesByNodeEnv } = require('../utils/tools')
const { Sequelize, DataTypes } = require('sequelize')

const { dbFilePath } = getValuesByNodeEnv()

let db = new sqlite3.Database(dbFilePath)

//执行sql语句
const runSql = async (sql) => {
  //console.log(sql)
  return new Promise((resolve) => {
    db.run(sql, (err) => {
      resolve(err)
    })
  })
}

//查询
const queryPromise = async (sql) => {
  console.log(sql)
  return new Promise((resolve, reject) => {
    db.all(sql, function (err, rows) {
      if (err) {
        reject(err)
      } else {
        resolve(rows)
      }
    })
  })
}

const sequelizeInit = async () => {
  const sequelize = new Sequelize({
    dialect: 'sqlite',
    storage: dbFilePath,
    define: {
      freezeTableName: true,
    },
  })

  try {
    await sequelize.authenticate()
    console.log('Connection has been established successfully.')
  } catch (error) {
    console.error('Unable to connect to the database:', error)
  }

  const ipInfo = sequelize.define('ipInfo', {
    uid: {
      type: DataTypes.STRING,
      allowNull: true,
      defaultValue: '',
    },
    ip: {
      type: DataTypes.STRING,
      allowNull: true,
      defaultValue: '',
    },
    info: {
      type: DataTypes.STRING,
      allowNull: true,
      defaultValue: '',
    },
    remarks: {
      type: DataTypes.STRING,
      allowNull: true,
      defaultValue: '',
    },
  })
  await sequelize.sync()
  return {
    sequelize,
    ipInfo,
  }
}

let sequelize
let ipInfo

sequelizeInit().then((res) => {
  sequelize = res.sequelize
  ipInfo = res.ipInfo
})

const getSequelizeData = () => {
  return {
    sequelize,
    ipInfo,
  }
}

module.exports = {
  runSql,
  queryPromise,
  getSequelizeData,
}

新建和查找:

const { runSql, queryPromise, getSequelizeData } = require('../../db/index')

//根据ip地址建立ip和地理位置映射关系表
const toolsIpInfo = async (req, res) => {
  const { ipInfo } = getSequelizeData()

  const ipInfoDbList = await ipInfo.findAll()

  const ipInfoInstance = await ipInfo.create({ uid, ip, info: JSON.stringify(item) })
  console.log(ipInfoInstance.toJSON())

  res.send({
    code: 200,
    data: {
    },
    message: '成功',
  })
}

Original: https://blog.csdn.net/xutongbao/article/details/127112018
Author: 徐同保
Title: node + sqlite + Sequelize (ORM:Object-Relational Mapping对象关系映射)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/815733/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球