ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] ### sequelize 数据库配置 ### 参数配置 ~~~ class Bar extends Model {} Bar.init({ /* bla */ }, { // 模型的名称. 该模型将以此名称存储在`sequelize.models`中. // 在这种情况下,默认为类名,即Bar. // 这将控制自动生成的foreignKey和关联命名的名称 modelName: 'bar', // 不添加时间戳属性 (updatedAt, createdAt) timestamps: false, // 不删除数据库条目,但将新添加的属性deletedAt设置为当前日期(删除完成时). // paranoid 只有在启用时间戳时才能工作 paranoid: true, // 将自动设置所有属性的字段参数为下划线命名方式. // 不会覆盖已经定义的字段选项 underscored: true, // 禁用修改表名; 默认情况下,sequelize将自动将所有传递的模型名称(define的第一个参数)转换为复数. 如果你不想这样,请设置以下内容 freezeTableName: true, // 定义表的名称 tableName: 'my_very_custom_table_name', // 启用乐观锁定. 启用时,sequelize将向模型添加版本计数属性, // 并在保存过时的实例时引发OptimisticLockingError错误. // 设置为true或具有要用于启用的属性名称的字符串. version: true, // Sequelize 实例 sequelize, }) ~~~ 如果你希望sequelize处理时间戳,但只想要其中一部分,或者希望你的时间戳被称为别的东西,则可以单独覆盖每个列: ~~~ class Foo extends Model {} Foo.init({ /* bla */ }, { // 不要忘记启用时间戳! timestamps: true, // 我不想要 createdAt createdAt: false, // 我想 updateAt 实际上被称为 updateTimestamp updatedAt: 'updateTimestamp', // 并且希望 deletedA t被称为 destroyTime(请记住启用paranoid以使其工作) deletedAt: 'destroyTime', paranoid: true, sequelize, }) ~~~ 你也可以更改数据库引擎,例如 变更到到MyISAM, 默认值是InnoDB. ~~~js class Person extends Model {} Person.init({ /* attributes */ }, { engine: 'MYISAM', sequelize }) // 或全局的 const sequelize = new Sequelize(db, user, pw, { define: { engine: 'MYISAM' } }) ~~~ 最后,你可以为MySQL和PG中的表指定注释 ~~~js class Person extends Model {} Person.init({ /* attributes */ }, { comment: "我是一个表注释!", sequelize }) ~~~ ***** ### 索引 Sequelize支持在`Model.sync()`或`sequelize.sync`中创建的模型定义中添加索引. ~~~js class User extends Model {} User.init({}, { indexes: [ // 在 email 上创建一个唯一索引 { unique: true, fields: ['email'] }, // 在使用 jsonb_path_ops 的 operator 数据上创建一个 gin 索引 { fields: ['data'], using: 'gin', operator: 'jsonb_path_ops' }, // 默认的索引名将是 [table]_[fields] // 创建多列局部索引 { name: 'public_by_author', fields: ['author', 'status'], where: { status: 'public' } }, // 具有有序字段的BTREE索引 { name: 'title_index', method: 'BTREE', fields: ['author', {attribute: 'title', collate: 'en_US', order: 'DESC', length: 5}] } ], sequelize }); ~~~ ***** ### 连接配置 ~~~ config.sequelize = { // 数据库类型 dialect: 'mysql', // 主机 host: '127.0.0.1', // 数据库密码 password: 'admin888', // 端口 port: 3306, // 数据库 database: 'weibo', // 中国时区 timezone: '+08:00', // 个性化配置 define: { // 取消数据表名复数 freezeTableName: true, // 自动写入时间戳 created_at updated_at timestamps: true, // 字段生成软删除时间戳 deleted_at paranoid: true, createdAt: 'created_at', updatedAt: 'updated_at', deletedAt: 'deleted_at', // 所有驼峰命名格式化 underscored: true } }; ~~~