sequelize 数据库配置
优质
小牛编辑
128浏览
2023-12-01
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.
class Person extends Model {}
Person.init({ /* attributes */ }, {
engine: 'MYISAM',
sequelize
})
// 或全局的
const sequelize = new Sequelize(db, user, pw, {
define: { engine: 'MYISAM' }
})
最后,你可以为MySQL和PG中的表指定注释
class Person extends Model {}
Person.init({ /* attributes */ }, {
comment: "我是一个表注释!",
sequelize
})
索引
Sequelize支持在Model.sync()
或sequelize.sync
中创建的模型定义中添加索引.
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
}
};