1:Sequelize 类

Sequelize是引用Sequelize模块获取的一个顶级对象,通过这个类可以获取模块内对其他对象的引用。比如utils、Transaction事务类。通过这个顶级对象创建实例后(连接数据库),可以使用这个实例定义模型,使用这个模型进行sql操作

1.1 创建实例  这个实例就是数据库连接对象


var sequelize = new Sequelize('database', 'username', 'password', {

host: 'localhost',

dialect: 'mysql'|'mariadb'|'sqlite'|'postgres'|'mssql',

pool: {

max: 5,

min: 0,

idle: 10000

},

// 仅 SQLite 适用

storage: 'path/to/database.sqlite'

});


1.2 定义model


var User = sequelize.define('user', {

firstName: {

type: Sequelize.STRING,

field: 'first_name' // Will result in an attribute that is firstName when user facing but first_name in the database

},

lastName: {

type: Sequelize.STRING

}

}, {

freezeTableName: true // Model 对应的表名将与model名相同

});


1.3 创建表


User.sync({force: true}).then(function () {

// 已创建数据表

return User.create({

firstName: 'John',

lastName: 'Hancock'

});

});

force:如果为true 如果原来存在,则将原来的表删除,并创建新的

如果为false 创建表,如果原来存在,则不创建

2:api new Sequelize() - 实例化 创建连接


new Sequelize(database, [username=null], [password=null], [options={}])

参数介绍:


database: 数据库名

username=nul  String类型  数据库用户名

password=null  string类型  注意:就算全部都是数字,也应该是字符串数字,不然会报错

options={}:参数对象

options.dialect='mysql’  String类型   要连接的数据库类型。可选值有:mysql、postgres、sqlite、mariadb、mssql

[options.host='localhost'  String   连接数据库的主机

options.port   连接数据库的端口

options.define={}  预先定义的model

options.logging=console.log  Function   用于Sequelize日志打印的函数

options.pool={}  对数据库连接池的配置

3: api 定义模型以及原始查询

sequelize.models: 获取在创建连接时,预先定义的model模型

sequelize.define(): 定义model

define(modelName, attributes, [options]) -> Model


以下为属性介绍:

modelName:表名


attributes:是一个对象,对列的描述主要属性如下:等号的意思是默认值

attributes.column:列的名字

attributes.column.type:列的数据类型

列的数据类型的介绍:

Sequelize.STRING// VARCHAR(255)

Sequelize.STRING(1234)// VARCHAR(1234)

Sequelize.STRING.BINARY              // VARCHAR BINARY

Sequelize.TEXT// TEXT

Sequelize.TEXT('tiny')// TINYTEXT

Sequelize.INTEGER// INTEGER

Sequelize.BIGINT// BIGINT

Sequelize.BIGINT(11)// BIGINT(11)

Sequelize.FLOAT// FLOAT

Sequelize.FLOAT(11)// FLOAT(11)

Sequelize.FLOAT(11, 12)// FLOAT(11,12)

Sequelize.REAL// REAL        PostgreSQL only.

Sequelize.REAL(11)// REAL(11)    PostgreSQL only.

Sequelize.REAL(11, 12)// REAL(11,12) PostgreSQL only.

Sequelize.DOUBLE// DOUBLE

Sequelize.DOUBLE(11)// DOUBLE(11)

Sequelize.DOUBLE(11, 12)// DOUBLE(11,12)

Sequelize.DECIMAL// DECIMAL

Sequelize.DECIMAL(10, 2)// DECIMAL(10,2)

Sequelize.DATE// DATETIME for mysql / sqlite, TIMESTAMP WITH TIME ZONE for postgres

Sequelize.DATE(6)// DATETIME(6) for mysql 5.6.4+. Fractional seconds support with up to 6 digits of precision

Sequelize.DATEONLY// DATE without time.

Sequelize.BOOLEAN// TINYINT(1)

Sequelize.ENUM('value 1', 'value 2')// An ENUM with allowed values 'value 1' and 'value 2'

Sequelize.ARRAY(Sequelize.TEXT)// Defines an array. PostgreSQL only.

Sequelize.JSON// JSON column. PostgreSQL only.

Sequelize.JSONB// JSONB column. PostgreSQL only.

Sequelize.BLOB// BLOB (bytea for PostgreSQL)

Sequelize.BLOB('tiny')// TINYBLOB (bytea for PostgreSQL. Other options are medium and long)

Sequelize.UUID//  PostgreSQL 和 SQLite 中为 UUID, MySQL 中为CHAR(36) BINARY (使用 defaultValue: Sequelize.UUIDV1 或 Sequelize.UUIDV4 生成默认值)

Sequelize.RANGE(Sequelize.INTEGER)// Defines int4range range. PostgreSQL only.

Sequelize.RANGE(Sequelize.BIGINT)// Defined int8range range. PostgreSQL only.

Sequelize.RANGE(Sequelize.DATE)// Defines tstzrange range. PostgreSQL only.

Sequelize.RANGE(Sequelize.DATEONLY)// Defines daterange range. PostgreSQL only.

Sequelize.RANGE(Sequelize.DECIMAL)// Defines numrange range. PostgreSQL only.

Sequelize.ARRAY(Sequelize.RANGE(Sequelize.DATE))// Defines array of tstzrange ranges. PostgreSQL only.

Sequelize.GEOMETRY// Spatial column.  PostgreSQL (with PostGIS) or MySQL only.

Sequelize.GEOMETRY('POINT')// Spatial column with geomerty type.  PostgreSQL (with PostGIS) or MySQL only.

Sequelize.GEOMETRY('POINT', 4326)// Spatial column with geomerty type and SRID.  PostgreSQL (with PostGIS) or MySQL only.

attributes.column.allowNull=true:Boolean值,为false时,会添加非空约束。

attributes.column.defaultValuee=null:列的默认值

attributes.column.unique=false:是否添加唯一性约束,为true时添加唯一性约束

attributes.column.primaryKey=false:是否为主键

attributes.column.field=null:设置当前子段在数据库中的名字。默认是column的值,如果添加这个属性,那么数据库中的字段名便是此值

attributes.column.autoIncrement=false:Boolean值,是否自增长

attributes.column.validate:模型验证,在对数据执行改变时,先验证是否符合要求。 // 一般使用代码验证

以下是设置外键。。根据了解,现在公司一般不设置表与表之间的关系

attributes.column.references:引用对象。设置这个属性证明这个键是外键

attributes.column.references.model:这属性指向一个model。

attributes.column.references.key='id‘:另一个model的主键

bar_id:{

type:Sequelize.INTEGER,

references:{

//这是引用另一个模型

model:Bar,

//这是引用模型的列名称

key:'id'} }


option是一个对象,以下是对options的字段介绍:

options.timestamps:boolean值,创建表时是否为模型添加 createdAt 和 updatedAt 两个时间戳字段(一般不用,自己创建这个字段)

options.paranoid=false:Boolean值,使用逻辑删除。设置为true后,调用 destroy 方法时将不会删队模型,而是设置一个 deletedAt 列。此设置需                                           要 timestamps=true

options.underscored=false:Boolean值,转换列名的驼峰命名规则为下划线命令规则

options.underscoredAll=false:Boolean值,转换模型名的驼峰命名规则为表名的下划线命令规则

options.freezeTableName=false:Boolean值,设置为true时,sequelize不会改变表名,否则可能会按其规则有

options.createdAt:Boolean值或字符串。。如果为字符串,则使用提供的值代替 createdAt 列的默认名,设置为flase则不添加这个字段。

个人理解就是为这个字段起别名

options.updatedAt:同上

options.deletedAt:同上

options.tableName:模型所对应表的表名,设置freezeTableName 为 true时,才会严格使用模型名

options.initialAutoIncrement:String类型 MySQL中设置 AUTO_INCREMENT (自增)的初始值

options.hooks:一个包含钩子函数的对象,这些函数会在生生命周期内某些事件发生之前或之后被调用。可添加的钩子函数有:beforeValidate,

afterValidate, beforeBulkCreate, beforeBulkDestroy, beforeBulkUpdate, beforeCreate, beforeDestroy, beforeUpdate, afterCreate,

afterDestroy, afterUpdate, afterBulkCreate, afterBulkDestory 和 afterBulkUpdate。每个属性可以是一个函数,或是一个包含一组函                            数的数组


3:api 对数据库的操作 一般用不到

sequelize.createSchema(schema, options={}) -> Promise:创建数据库schema

sequelize.showAllSchemas() - 查询已定义的schema

sequelize.dropSchema() - 删除定义的schema

sequelize.dropAllSchemas() - 删除所有schema

sequelize.sync() - 同步模型到数据库 (这个有用)

sequelize.drop() - 删除表

sequelize.authenticate() - 验证连接

sequelize.transaction() - 启动事务

例子:

sequelize.transaction().then(function (t) {

return User.find(..., { transaction: t}).then(function (user) {

return user.updateAttributes(..., { transaction: t});

})

.then(t.commit.bind(t))

.catch(t.rollback.bind(t));

})

sequelize.getDialect():该实例方法用于返回实例类型(数据库类型)

sequelize.getQueryInterface():返回QueryInterface的实例 这对象的内置方法主要是对表的操作,增删改查

Sequelize.Utils:工具类

Sequelize.QueryTypes:查询类型枚举  猜测是模型执行sql时使用。暂不清楚用法

module.exports = {

SELECT: 'SELECT',

INSERT: 'INSERT',

UPDATE: 'UPDATE',

BULKUPDATE: 'BULKUPDATE',

BULKDELETE: 'BULKDELETE',

DELETE: 'DELETE',

UPSERT: 'UPSERT',

VERSION: 'VERSION',

SHOWTABLES: 'SHOWTABLES',

SHOWINDEXES: 'SHOWINDEXES',

DESCRIBE: 'DESCRIBE',

RAW: 'RAW',

FOREIGNKEYS: 'FOREIGNKEYS',

};

Sequelize.Validator: 对象用于Sequelize内部的验证,如:非常、URL、IP等,也可以通过该属性进行一些自定义验证。

Sequelize.Transaction: 事物对象

Sequelize.Instance: 指向数据库连接对象

Sequelize.Association: 指向Association类

4:数据库的错误类型

Sequelize.Error: 错误对象

Sequelize.ValidationError: 验证失败成此对象

Sequelize.DatabaseError: 数据库错误对象

Sequelize.TimeoutErro: 查询超时对象

Sequelize.UniqueConstraintError:唯一性错误对象

Sequelize.ForeignKeyConstraintError: 违反外键约束错误对象

Sequelize.ExclusionConstraintError:违反排除约束对象

Sequelize.ConnectionError:连接错误对象

Sequelize.ConnectionRefusedError: 一个指向数据库连接被拒绝时触发的错误对象

Sequelize.AccessDeniedError: 连接到数据库但没有访问权限时会触发此错误。

Sequelize.HostNotFoundError: 连接数据但主机名(IP或URI)未找到时会触发这个错误对象。

Sequelize.InvalidConnectionError:连接到数据库但其中的任意参数出现错误时会触发这个错误对象。

Sequelize.ConnectionTimedOutError:连接数据库超时时会触发这个错误对象。

Sequelize.InstanceError: 当任何实例方法出现问题时会触发这个错误对象。

作者:一夜风情
链接:https://www.jianshu.com/p/af68364e5bdd
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

Sequelize 类 建立数据库连接 模型定义的更多相关文章

  1. Sequelize模型定义

    定义 定义模型与表之间的映射,使用 define 方法. Sequelize 会自动增加 createdAt 和 updated 属性,这样能知道一个实例的创建时间和最终修改时间.如果不想自动生成,可 ...

  2. Entity Framework 6 Recipes 2nd Edition(11-1)译 -> 从“模型定义”函数返回一个标量值

    第11章函数 函数提供了一个有力代码复用机制, 并且让你的代码保持简洁和易懂. 它们同样也是EF运行时能利用的数据库层代码.函数有几类: Rowset Functions, 聚合函数, Ranking ...

  3. Entity Framework 6 Recipes 2nd Edition(11-2)译 -> 用”模型定义”函数过滤实体集

    11-2. 用”模型定义”函数过滤实体集 问题 想要创建一个”模型定义”函数来过滤一个实体集 解决方案 假设我们已有一个客户(Customer)和票据Invoice)模型,如Figure 11-2所示 ...

  4. Entity Framework 6 Recipes 2nd Edition(11-5)译 -> 从”模型定义”函数返回一个匿名类型

    11-5. 从”模型定义”函数返回一个匿名类型 问题 想创建一个返回一个匿名类型的”模型定义”函数 解决方案 假设已有游客(Visitor) 预订(reservation)房间(hotel ) 的模型 ...

  5. Entity Framework 6 Recipes 2nd Edition(11-6)译 -> 从一个”模型定义”函数里返回一个复杂类型

    11-6.从一个”模型定义”函数里返回一个复杂类型 问题 想要从一个”模型定义”函数返回一个复杂类型 解决方案 假设我们有一个病人(patient)和他们访客(visit)的模型,如 Figure 1 ...

  6. PowerDesigner软件建立新模型。

      打开PowerDesigner软件,选择菜单文件->建立新模型,或者敲击键盘ctrl+N   弹出建立新模型窗口,模型类型选择Object-Oriented Model,图选择Class D ...

  7. 利用libsvm-mat建立分类模型model参数解密[zz from faruto]

    本帖子主要就是讲解利用libsvm-mat工具箱建立分类(回归模型)后,得到的模型model里面参数的意义都是神马?以及如果通过model得到相应模型的表达式,这里主要以分类问题为例子. 测试数据使用 ...

  8. 图像配准建立仿射变换模型并用RANSAC算法评估

    当初选方向时就由于从小几何就不好.缺乏空间想像能力才没有选择摄影測量方向而是选择了GIS. 昨天同学找我帮他做图像匹配.这我哪里懂啊,无奈我是一个别人有求于我,总是不好意思开口拒绝的人.于是乎就看着他 ...

  9. MDA模型定义及扩展

    Tiny框架中.对模型本向没有不论什么强制性约束,也就是说你能够把不论什么类型的对象作为模型.也不必实现不论什么接口. 因此简单的说,你定义一个类.里面有一些描写叙述业务属性或处理的内容,就能够说它是 ...

随机推荐

  1. linux下MySQL的启动与访问

    启动与停止 1.启动 MySQL安装完成后启动文件mysql在/etc/init.d目录下,在需要启动时运行下面命令即可. [root@test1 init.d]# /etc/init.d/mysql ...

  2. Comet OJ Contest #13 简要题解

    C2 首先用并查集维护\(1\)的连通块,然后用另外一个并查集维护第\(i\)行中,第\(j\)列之后的第一个\(0\)的位置,就是如果当前位置是\(1\)那么它的父亲是它右边的格子,否则是它自己. ...

  3. Luogu4931 情侣?给我烧了!(加强版)【生成函数】

    题目链接:洛谷 大家一起 日 ♂ % EI 设\(D_i\)表示\(k=0\)时的答案.那么 \[ f(n,k)=\binom{n}{k}^2D_{n-k}k!2^k \] 意义是选择\(k\)对情侣 ...

  4. LOJ#565. 「LibreOJ Round #10」mathematican 的二进制 分治,FFT,概率期望

    原文链接www.cnblogs.com/zhouzhendong/p/LOJ565.html 前言 标算真是优美可惜这题直接暴力FFT算一算就solved了. 题解 首先,假装没有进位,考虑解决这个问 ...

  5. [FUZZ]文件上传fuzz字典生成脚本—使用方法

    文件上传fuzz字典生成脚本-使用方法 原作者:c0ny1 项目地址:https://github.com/c0ny1/upload-fuzz-dic-builder 项目预览效果图: 帮助手册: 脚 ...

  6. 中山纪中集训Day1测试(摸鱼)

    AT3 粉刷匠 Description 赫克托是一个魁梧的粉刷匠,而且非常喜欢思考= = 现在,神庙里有N根排列成一直线的石柱,从1到N标号,长老要求用油漆将这些石柱重新粉刷一遍.赫克托有K桶颜色各不 ...

  7. STP生成树详解图

  8. mysql忘记密码恢复

    MySQL忘记密码恢复密码的实现方法 作者:mdxy-dxy 流传较广的方法,mysql中文参考手册上的,各位vps主机租用客户和服务器托管用户忘记mysql5.1管理员密码时,可以使用这种方法破解下 ...

  9. 【Python 代码】CS231n中Softmax线性分类器、非线性分类器对比举例(含python绘图显示结果)

    1 #CS231n中线性.非线性分类器举例(Softmax) #注意其中反向传播的计算 # -*- coding: utf-8 -*- import numpy as np import matplo ...

  10. Linux创建内存磁盘空间

    mount -t tmpfs -o size=20k tmpfs /var/iot/ 修改 /etc/fstab 启动自动mount tmpfs /var/iot tmpfs defaults,siz ...