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),当然这是完全可配置的.


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: '成功',
  })
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐同保

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值