node/egg - sequelize 构建ORM

1 篇文章 0 订阅
1 篇文章 0 订阅

1. npm i egg-sequelize mysql2 sequelize-cli

启动项目 npm run dev

 2. 配置plugin.js启动插件

exports.sequelize = {
  enable: true,
  package: 'egg-sequelize',
};

配置config.default.js

 config.sequelize = {
    dialect: 'mysql',
    database: 'baseName',
    host: 'localhost',
    port: '3306',
    username: 'root',
    password: 'root,
    timezone: '+08:00' // 时区
  }

3.配置 .sequelize(因为egg-sequlize的sequelize-cli有版本问题,所以自定义sequelize-cli)

const path = require('path');

module.exports = {
  'config': path.resolve('config', 'config.json'),
  'models-path': path.resolve('app', 'model'),
  'seeders-path': path.resolve('app', 'seeder'),
  'migrations-path': path.resolve('app', 'migration')
}

  初始化 

$ node_modules/.bin/sequelize init

生成3个文件夹 1个json文件

app/migration  # 用来存放数据库迁移文件夹,当需要修改表结构的时候,可以控制这些代码来控制数据库表结构的版本回退

app/model  # 用表中字段如何映射到js对象上的逻辑

app/seeder  # 用来存放如何生成假数据的文件夹

config/config.json # 数据库配置

{
  "development": {
    "username": "root",
    "password": "yourpass",
    "database": "database_development",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "test": {
    "username": "root",
    "password": "yourpass",
    "database": "database_test",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "production": {
    "username": "root",
    "password": "yourpass",
    "database": "database_production",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }
}

注意: 如果你的数据库还不存在,你可以调用 npx sequelize db:create (--env=development 可添加环境)命令。 通过正确的访问,它将为您创建该数据库。

4 创建user 的 Migration

$ node_modules/.bin/sequelize model:generate --name User --attributes firstName:string,lastName:string,email:string

这将发生以下事情

  • 在 models 文件夹中创建了一个 user 模型文件
  • 在 migrations 文件夹中创建了一个名字像 XXXXXXXXXXXXXX-create-user.js 的迁移文件

注意: Sequelize 将只使用模型文件,它是表描述。另一边,迁移文件是该模型的更改,或更具体的是说 CLI 所使用的表。 处理迁移,如提交或日志,以进行数据库的某些更改。

迁移到数据库

$ node_modules/.bin/sequelize db:migrate

撤销迁移

恢复最近的迁移

$ node_modules/.bin/sequelize db:migrate:undo

通过使用 db:migrate:undo:all 命令撤消所有迁移,可以恢复到初始状态。 您还可以通过将其名称传递到 --to 选项中来恢复到特定的迁移

$ node_modules/.bin/sequelize db:migrate:undo:all --to XXXXXXXXXXXXXX-create-posts.js

5. 创建假数据

这个命令将会在 seeders 文件夹中创建一个种子文件。文件名看起来像是 XXXXXXXXXXXXXX-demo-user.js,它遵循相同的 up/down 语义,如迁移文件。

node_modules/.bin/sequelize seed:generate --name demo-user

现在编辑这个文件

'use strict';

module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.bulkInsert('Users', [{
        firstName: 'John',
        lastName: 'Doe',
        email: 'demo@demo.com'
      }], {});
  },

  down: (queryInterface, Sequelize) => {
    return queryInterface.bulkDelete('Users', null, {});
  }
};

插入数据库

$ node_modules/.bin/sequelize db:seed:all

这将执行该种子文件,您将有一个演示用户插入 User 表。

注意: seeders 执行不会存储在任何使用 SequelizeMeta 表的迁移的地方。 如果你想覆盖这个,请阅读 存储 部分

撤销

node_modules/.bin/sequelize db:seed:undo

撤销全部

node_modules/.bin/sequelize db:seed:undo:all
Traceback (most recent call last): File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/persistence.py", line 1390, in _do_pre_synchronize query.whereclause) File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/evaluator.py", line 39, in process return meth(clause) File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/evaluator.py", line 81, in visit_clauselist evaluators = list(map(self.process, clause.clauses)) File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/evaluator.py", line 39, in process return meth(clause) File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/evaluator.py", line 111, in visit_binary [clause.left, clause.right])) File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/evaluator.py", line 39, in process return meth(clause) File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/evaluator.py", line 42, in visit_grouping return self.process(clause.element) File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/evaluator.py", line 39, in process return meth(clause) File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/evaluator.py", line 105, in visit_clauselist clause.operator) sqlalchemy.orm.evaluator.UnevaluatableError: Cannot evaluate clauselist with operator <function comma_op at 0x7fe3ed7800e0> During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/srv/srv_x6/thirdpart/easemob/chartmsg.py", line 229, in send_sys_msg_to_person yield QyWxManage(business_id=business_id, user={}).qywx_send_msg(business_id, user_id_list, customer_content=sns_alert_sys_msg_model) File "/srv/srv_x6/services/qyWX/qyWX_manage.py", line 889, in qywx_send_msg update({Employee.qywx_user_id: ""}) File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/query.py", line 3369, in update update_op.exec_() File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/persistence.py", line 1324, in exec_ self._do_pre_synchronize() File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/persistence.py", line 1401, in _do_pre_synchronize 'synchronize_session parameter.' % err) sqlalchemy.exc.InvalidRequestError: Could not evaluate current criteria in Python: "Cannot evaluate clauselist with operator <function comma_op at 0x7fe3ed7800e0>". Specify 'fetch' or False for the synchronize_session parameter.
07-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值