zoukankan      html  css  js  c++  java
  • Sequelize 类 建立数据库连接 模型定义

    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
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    [水煮 ASP.NET Web API2 方法论](3-6)万能路由
    [水煮 ASP.NET Web API2 方法论](3-5)路由约束
    [水煮 ASP.NET Web API2 方法论](3-4)设置路由可选项
    [水煮 ASP.NET Web API2 方法论](3-3)路由默认值
    [水煮 ASP.NET Web API2 方法论](3-2)直接式路由/属性路由
    [转载自简书] ASPNetCore上传大文件碰到的一些问题总结
    [转载] 关于web.config
    [转载] sessionState 4种mode模式
    [转载] web.config 配置详解
    文档注释标记
  • 原文地址:https://www.cnblogs.com/zzsdream/p/11088678.html
Copyright © 2011-2022 走看看