Sequelize
这是主类,是 Sequelize 的入口点。
静态方法摘要
静态公共方法 | ||
public static |
AND 查询 |
自 v2.0.0-dev3 起 |
public static |
创建一个表示对 cast 函数调用的对象。 |
自 v2.0.0-dev3 起 |
public static |
创建一个表示数据库中列的对象,这允许在查询中引用另一列。 |
自 v2.0.0-dev3 起 |
public static |
创建一个表示数据库函数的对象。 |
自 v2.0.0-dev3 起 |
public static |
创建一个表示 PostgreSQL/SQLite/MySQL json 数据类型嵌套 where 条件的对象。 |
|
public static |
创建一个表示字面量的对象,例如 |
自 v2.0.0-dev3 起 |
public static |
OR 查询 |
自 v2.0.0-dev3 起 |
public static |
在 Sequelize 中使用 CLS(Continuation Local Storage)。 |
|
public static |
指定 attr = condition 的一种方式。 |
自 v2.0.0-dev3 起 |
构造函数汇总
公共构造函数 | ||
public |
constructor(database: 字符串, username: 字符串, password: 字符串, options: 对象) 使用数据库名称、用户名和密码实例化 Sequelize。 |
成员汇总
公共成员 | ||
public |
models: {} 模型存储在此处,名称为 |
方法汇总
公共方法 | ||
public |
异步 authenticate(options: 对象): Promise 通过尝试进行身份验证来测试连接。 |
|
public |
关闭此 Sequelize 实例使用的所有连接,并释放所有引用,以便可以垃圾回收该实例。 |
|
public |
异步 createSchema(schema: 字符串, options: 对象): Promise 创建一个新的数据库模式。 |
|
public |
定义一个新的模型,表示数据库中的一个表。 |
|
public |
删除通过此 Sequelize 实例定义的所有表。 |
|
public |
异步 dropAllSchemas(options: 对象): Promise 删除所有模式。 |
|
public |
异步 dropSchema(schema: 字符串, options: 对象): Promise 删除单个模式 |
|
public |
转义值。 |
|
public |
返回数据库名称。 |
|
public |
getDialect(): 字符串 返回指定的方言。 |
|
public |
返回 QueryInterface 的一个实例。 |
|
public |
检查是否定义了具有给定名称的模型 |
|
public |
获取已定义的模型 |
|
public |
在数据库上执行查询,可以选择绕过所有 Sequelize 功能。 |
|
public |
根据方言获取随机函数。 |
|
public |
执行设置环境或用户变量的查询。 |
|
public |
异步 showAllSchemas(options: 对象): Promise 显示所有已定义的模式 |
|
public |
将所有已定义的模型同步到数据库。 |
|
public |
异步 transaction(options: 对象, autoCallback: 函数): Promise 启动事务。 |
|
public |
截断通过 Sequelize 模型定义的所有表。 |
静态公共方法
公有 静态 cast(val: 任意, type: 字符串): cast 自 v2.0.0-dev3 起 来源
创建一个表示对 cast 函数调用的对象。
参数
名称 | 类型 | 属性 | 描述 |
val | 任意 | 要转换的值 |
|
type | 字符串 | 要转换成的类型 |
公有 静态 col(col: 字符串): col 自 v2.0.0-dev3 起 来源
创建一个表示数据库中列的对象,这允许在查询中引用另一列。这通常与 sequelize.fn
结合使用很有用,因为 fn 的原始字符串参数将被转义。
参数
名称 | 类型 | 属性 | 描述 |
col | 字符串 | 列的名称 |
参见
- Sequelize#fn
公有 静态 fn(fn: 字符串, args: 任意): fn 自 v2.0.0-dev3 起 来源
创建一个表示数据库函数的对象。这可以在搜索查询中使用,包括 where 和 order 部分,以及列定义中的默认值。如果要引用函数中的列,则应使用 sequelize.col
,以便列被正确解释为列而不是字符串。
参数
名称 | 类型 | 属性 | 描述 |
fn | 字符串 | 您要调用的函数 |
|
args | 任意 | 所有后续参数都将作为参数传递给函数。 |
示例
instance.update({
username: sequelize.fn('upper', sequelize.col('username'))
});
公有 静态 json(conditionsOrPath: 字符串 | 对象, value: 字符串 | 数字 | 布尔值): json 来源
创建一个表示 PostgreSQL/SQLite/MySQL json 数据类型嵌套 where 条件的对象。
公有 静态 useCLS(ns: 对象): 对象 来源
在 Sequelize 中使用 CLS(延续本地存储)。使用延续本地存储,事务回调中的所有查询将自动接收事务对象。
提供的 CLS 命名空间存储为 Sequelize._cls
参数
名称 | 类型 | 属性 | 描述 |
ns | 对象 | CLS 命名空间 |
公有 静态 where(attr: 对象, comparator: 符号, logic: 字符串 | 对象): * 自 v2.0.0-dev3 起 来源
指定 attr = condition 的一种方式。
attr 可以是 Model.rawAttributes
中获取的对象(例如 Model.rawAttributes.id
或 Model.rawAttributes.name
)。该属性应在您的模型定义中定义。该属性也可以是来自 Sequelize 实用程序函数之一的对象(sequelize.fn
、sequelize.col
等)。
对于字符串属性,使用常规的 { where: { attr: something }}
语法。如果不想转义字符串,请使用 sequelize.literal
。
返回值
* |
公有构造函数
公有 constructor(database: 字符串, username: 字符串, password: 字符串, options: 对象) 来源
使用数据库名称、用户名和密码实例化 Sequelize。
参数
名称 | 类型 | 属性 | 描述 |
database | 字符串 |
|
数据库的名称 |
username | 字符串 |
|
用于针对数据库进行身份验证的用户名。 |
password | 字符串 |
|
用于针对数据库进行身份验证的密码。支持 SQLite 的 SQLCipher 加密。 |
options | 对象 |
|
包含选项的对象。 |
options.host | 字符串 |
|
关系数据库的主机。 |
options.port | 数字 |
|
关系数据库的端口。 |
options.username | 字符串 |
|
用于针对数据库进行身份验证的用户名。 |
options.password | 字符串 |
|
用于针对数据库进行身份验证的密码。 |
options.database | 字符串 |
|
数据库的名称。 |
options.dialect | 字符串 |
|
您要连接到的数据库的方言。mysql、postgres、sqlite、db2、mariadb 和 mssql 之一。 |
options.dialectModule | 字符串 |
|
如果指定,则使用此方言库。例如,如果要使用 pg.js 而不是 pg 连接到 pg 数据库,则应在此处指定“require("pg.js")” |
options.dialectModulePath | 字符串 |
|
如果指定,则从此路径加载方言库。例如,如果要使用 pg.js 而不是 pg 连接到 pg 数据库,则应在此处指定“/path/to/pg.js” |
options.dialectOptions | 对象 |
|
其他选项的对象,这些选项将直接传递给连接库 |
options.storage | 字符串 |
|
仅 sqlite 使用。默认为 ':memory:' |
options.protocol | 字符串 |
|
关系数据库的协议。 |
options.define | 对象 |
|
模型定义的默认选项。请参阅 Model.init。 |
options.query | 对象 |
|
sequelize.query 的默认选项 |
options.schema | 字符串 |
|
要使用的模式 |
options.set | 对象 |
|
sequelize.set 的默认选项 |
options.sync | 对象 |
|
sequelize.sync 的默认选项 |
options.timezone | 字符串 |
|
将数据库中的日期转换为 JavaScript 日期时使用的时区。连接到服务器时,此时区也用于 SET TIMEZONE,以确保 NOW、CURRENT_TIMESTAMP 和其他与时间相关的函数的结果具有正确的时区。为了获得最佳的跨平台性能,请使用 +/-HH:MM 格式。还会接受 moment.js 使用的时区的字符串版本(例如“America/Los_Angeles”);这对于捕获夏令时变化很有用。 |
options.clientMinMessages | 字符串 | 布尔值 |
|
(已弃用)PostgreSQL 的 |
options.standardConformingStrings | 布尔值 |
|
PostgreSQL 的 |
options.logging | 函数 |
|
每次 Sequelize 要记录某些内容时都会执行的函数。函数可能会接收多个参数,但 |
options.benchmark | 布尔值 |
|
将查询执行时间(以毫秒为单位)作为第二个参数传递给日志记录函数 (options.logging)。 |
options.omitNull | 布尔值 |
|
一个标志,用于定义是否将 null 值作为值传递给 CREATE/UPDATE SQL 查询。 |
options.native | 布尔值 |
|
一个标志,用于定义是否应使用原生库。目前仅对 postgres 有效 |
options.ssl | 布尔值 |
|
一个标志,用于定义连接是否应通过 ssl。 |
options.replication | 布尔值 |
|
使用读/写复制。要启用复制,请传递一个对象,该对象具有两个属性 read 和 write。Write 应为一个对象(用于处理写入的单个服务器),而 read 应为一个对象数组(多个服务器用于处理读取)。每个读/写服务器可以具有以下属性: |
options.pool | 对象 |
|
sequelize 连接池配置 |
options.pool.max | 数字 |
|
池中连接的最大数量 |
options.pool.min | 数字 |
|
池中连接的最小数量 |
options.pool.idle | 数字 |
|
连接在释放之前可以保持空闲的最长时间(以毫秒为单位)。 |
options.pool.acquire | 数字 |
|
池在抛出错误之前尝试获取连接的最长时间(以毫秒为单位) |
options.pool.evict | 数字 |
|
sequelize-pool 删除空闲连接的时间间隔(以毫秒为单位)。 |
options.pool.validate | 函数 |
|
一个验证连接的函数。使用 client 调用。默认函数检查 client 是否为对象,以及其状态是否未断开连接 |
options.pool.maxUses | 数字 |
|
连接在丢弃以进行替换之前可以使用的次数, |
options.quoteIdentifiers | 布尔值 |
|
设置为 |
options.transactionType | 字符串 |
|
设置默认事务类型。有关可能的选项,请参阅 |
options.isolationLevel | 字符串 |
|
设置默认事务隔离级别。有关可能的选项,请参阅 |
options.retry | 对象 |
|
一组控制何时自动重试查询的标志。接受 |
options.retry.match | 数组 |
|
仅当错误与这些字符串之一匹配时才重试查询。 |
options.retry.max | 数字 |
|
自动重试失败查询的次数。设置为 0 以禁用对 SQL_BUSY 错误的重试。 |
options.typeValidation | 布尔值 |
|
在插入和更新以及带有 where 子句的 select 中运行内置类型验证器,例如验证传递给整数字段的参数是否类似于整数。 |
options.operatorsAliases | 对象 |
|
基于字符串的操作符别名。传递对象以限制一组具有别名的操作符。 |
options.hooks | 对象 |
|
全局钩子函数的对象,这些函数在某些生命周期事件之前和之后调用。全局钩子将在为同一事件定义的任何模型特定钩子之后运行(有关列表,请参阅 |
options.minifyAliases | 布尔值 |
|
一个标志,用于定义是否应缩小别名(主要用于避免 Postgres 别名字符限制为 64) |
options.logQueryParameters | 布尔值 |
|
一个标志,用于定义是否在日志中显示绑定参数。 |
示例
// without password / with blank password
const sequelize = new Sequelize('database', 'username', null, {
dialect: 'mysql'
})
// with password and options
const sequelize = new Sequelize('my_database', 'john', 'doe', {
dialect: 'postgres'
})
// with database, username, and password in the options object
const sequelize = new Sequelize({ database, username, password, dialect: 'mssql' });
// with uri
const sequelize = new Sequelize('mysql://127.0.0.1:3306/database', {})
// option examples
const sequelize = new Sequelize('database', 'username', 'password', {
// the sql dialect of the database
// currently supported: 'mysql', 'sqlite', 'postgres', 'mssql'
dialect: 'mysql',
// custom host; default: localhost
host: 'my.server.tld',
// for postgres, you can also specify an absolute path to a directory
// containing a UNIX socket to connect over
// host: '/sockets/psql_sockets'.
// custom port; default: dialect default
port: 12345,
// custom protocol; default: 'tcp'
// postgres only, useful for Heroku
protocol: null,
// disable logging or provide a custom logging function; default: console.log
logging: false,
// you can also pass any dialect options to the underlying dialect library
// - default is empty
// - currently supported: 'mysql', 'postgres', 'mssql'
dialectOptions: {
socketPath: '/Applications/MAMP/tmp/mysql/mysql.sock',
supportBigNumbers: true,
bigNumberStrings: true
},
// the storage engine for sqlite
// - default ':memory:'
storage: 'path/to/database.sqlite',
// disable inserting undefined values as NULL
// - default: false
omitNull: true,
// a flag for using a native library or not.
// in the case of 'pg' -- set this to true will allow SSL support
// - default: false
native: true,
// A flag that defines if connection should be over ssl or not
// - default: undefined
ssl: true,
// Specify options, which are used when sequelize.define is called.
// The following example:
// define: { timestamps: false }
// is basically the same as:
// Model.init(attributes, { timestamps: false });
// sequelize.define(name, attributes, { timestamps: false });
// so defining the timestamps for each model will be not necessary
define: {
underscored: false,
freezeTableName: false,
charset: 'utf8',
dialectOptions: {
collate: 'utf8_general_ci'
},
timestamps: true
},
// similar for sync: you can define this to always force sync for models
sync: { force: true },
// pool configuration used to pool database connections
pool: {
max: 5,
idle: 30000,
acquire: 60000,
},
// isolation level of each transaction
// defaults to dialect default
isolationLevel: Transaction.ISOLATION_LEVELS.REPEATABLE_READ
})
公共成员
公共方法
public 异步 authenticate(options: 对象): Promise source
通过尝试进行身份验证来测试连接。它运行 SELECT 1+1 AS result
查询。
参数
名称 | 类型 | 属性 | 描述 |
options | 对象 |
|
查询选项 |
public close(): Promise source
关闭此 Sequelize 实例使用的所有连接,并释放所有引用,以便可以垃圾回收该实例。
通常在进程退出时完成此操作,因此仅当您创建多个实例并希望垃圾回收其中一些实例时,才需要调用此方法。
public 异步 createSchema(schema: 字符串, options: 对象): Promise source
创建一个新的数据库模式。
注意:这是 postgres 意义上的模式,而不是数据库表。在 mysql 和 sqlite 中,此命令将不执行任何操作。
public define(modelName: 字符串, attributes: 对象, options: 对象): Model source
定义一个新的模型,表示数据库中的一个表。
表列由作为第二个参数给出的对象定义。对象的每个键都表示一个列
参数
名称 | 类型 | 属性 | 描述 |
modelName | 字符串 | 模型的名称。模型将在此名称下存储在 |
|
attributes | 对象 | 一个对象,其中每个属性都是表的列。请参阅 Model.init |
|
options | 对象 |
|
这些选项与提供给 Sequelize 构造函数的默认 define 选项合并,并传递给 Model.init() |
示例
sequelize.define('modelName', {
columnA: {
type: Sequelize.BOOLEAN,
validate: {
is: ["[a-z]",'i'], // will only allow letters
max: 23, // only allow values <= 23
isIn: {
args: [['en', 'zh']],
msg: "Must be English or Chinese"
}
},
field: 'column_a'
},
columnB: Sequelize.STRING,
columnC: 'MY VERY OWN COLUMN TYPE'
});
sequelize.models.modelName // The model will now be available in models under the name given to define
参见
- 有关 `options` 和 `attributes` 对象的更全面的规范,请参阅 Model.init。
- 模型基础知识 指南
public 异步 drop(options: 对象): Promise source
删除通过此 sequelize 实例定义的所有表。这是通过对每个模型调用 Model.drop 来完成的。
参见
- 有关选项,请参阅 Model.drop
public 异步 dropAllSchemas(options: 对象): Promise source
删除所有模式。
注意:这是 postgres 意义上的模式,而不是数据库表。在 mysql 和 sqlite 中,这等效于删除所有表。
public 异步 dropSchema(schema: 字符串, options: 对象): Promise source
删除单个模式
注意:这是 postgres 意义上的模式,而不是数据库表。在 mysql 和 sqlite 中,这将删除与模式名称匹配的表
public isDefined(modelName: 字符串): 布尔值 source
检查是否定义了具有给定名称的模型
参数
名称 | 类型 | 属性 | 描述 |
modelName | 字符串 | 使用 Sequelize.define 定义的模型的名称 |
public model(modelName: string): Model 源代码
获取已定义的模型
参数
名称 | 类型 | 属性 | 描述 |
modelName | 字符串 | 使用 Sequelize.define 定义的模型的名称 |
抛出异常
* |
如果模型未定义(即,如果 sequelize#isDefined 返回 false),则会抛出错误。 |
public async query(sql: string, options: object): Promise 源代码
在数据库上执行查询,可以选择绕过所有 Sequelize 功能。
默认情况下,该函数将返回两个参数:结果数组和元数据对象,其中包含受影响的行数等。
如果您正在运行不需要元数据的查询类型,例如 SELECT
查询,您可以传入查询类型以使 sequelize 格式化结果。
const [results, metadata] = await sequelize.query('SELECT...'); // Raw query - use array destructuring
const results = await sequelize.query('SELECT...', { type: sequelize.QueryTypes.SELECT }); // SELECT query - no destructuring
参数
名称 | 类型 | 属性 | 描述 |
SQL语句 | 字符串 | ||
options | 对象 |
|
查询选项。 |
options.raw | 布尔值 |
|
如果为 true,则 sequelize 不会尝试格式化查询结果,也不会根据结果构建模型实例。 |
options.transaction | 事务 |
|
查询应在其中执行的事务。 |
options.type | QueryTypes |
|
您正在执行的查询类型。查询类型会影响结果在传递回之前如何格式化。类型为字符串,但 |
options.nest | 布尔值 |
|
如果为 true,则使用 dottie.js 将具有 |
options.plain | 布尔值 |
|
将查询类型设置为 |
options.replacements | object | Array |
|
格式为 |
options.bind | object | Array |
|
格式为 |
options.useMaster | 布尔值 |
|
强制查询使用写入池,而不管查询类型。 |
options.logging | 函数 |
|
在运行查询时执行以记录 SQL 的函数。 |
options.instance | Model |
|
一个 Sequelize 模型实例,其 Model 用于构建查询结果。 |
options.model | typeof Model |
|
用于构建返回的模型实例的 Sequelize 模型。 |
options.retry | 对象 |
|
一组控制何时自动重试查询的标志。接受 |
options.retry.match | 数组 |
|
仅当错误与这些字符串之一匹配时才重试查询。 |
options.retry.max | 整数 |
|
失败查询自动重试的次数。 |
options.searchPath | 字符串 |
|
一个可选参数,用于指定模式搜索路径(仅限 Postgres)。 |
options.supportsSearchPath | 布尔值 |
|
如果为 false,则不要在查询前加上搜索路径(仅限 Postgres)。 |
options.mapToModel | 布尔值 |
|
如果存在 |
options.fieldMap | 对象 |
|
将返回的字段映射到 |
options.rawErrors | 布尔值 |
|
设置为 |
参见
- 有关实例选项的更多信息,请参阅 Model.build。
public async set(variables: object, options: object): Promise 源代码
执行一个查询,该查询将设置环境或用户变量。变量是在每个连接上设置的,因此此函数需要一个事务。仅适用于 MySQL 或 MariaDB。
public async showAllSchemas(options: object): Promise 源代码
显示所有已定义的模式
注意:这是 Postgres 中的模式意义,而不是数据库表。在 MySQL 和 SQLite 中,这将显示所有表。
public async sync(options: object): Promise 源代码
将所有已定义的模型同步到数据库。
参数
名称 | 类型 | 属性 | 描述 |
options | 对象 |
|
同步选项 |
options.force | 布尔值 |
|
如果 force 为 true,则每个 Model 都会在尝试创建自己的表之前运行 |
options.match | 正则表达式 |
|
在同步之前对数据库名称进行正则表达式匹配,这是对在测试中使用 force: true 但不在实际代码中使用的情况的安全检查。 |
options.logging | 布尔值 | 函数 |
|
一个记录 sql 查询的函数,或者 false 表示不记录。 |
options.schema | 字符串 |
|
应在其中创建表的模式。这可以在 sequelize.define 中为每个表覆盖。 |
options.searchPath | 字符串 |
|
一个可选参数,用于指定模式搜索路径(仅限 Postgres)。 |
options.hooks | 布尔值 |
|
如果 hooks 为 true,则将调用 beforeSync、afterSync、beforeBulkSync、afterBulkSync 钩子。 |
options.alter | boolean | object |
|
更改表以适应模型。提供一个对象以进行其他配置。不建议在生产环境中使用。如果未进一步配置,则会删除已删除或类型在模型中已更改的列中的数据。 |
options.alter.drop | 布尔值 |
|
当设置为 |
public async transaction(options: object, autoCallback: Function): Promise 源代码
启动事务。使用事务时,您应在 options 参数中传递事务,以便查询在该事务下发生 @see Transaction
如果您启用了 CLS,则事务将自动传递到在回调中运行的任何查询。
参数
名称 | 类型 | 属性 | 描述 |
options | 对象 |
|
事务选项 |
options.type | 字符串 |
|
有关可能的选项,请参阅 |
options.isolationLevel | 字符串 |
|
有关可能的选项,请参阅 |
options.deferrable | 字符串 |
|
设置约束是延迟检查还是立即检查。请参阅 |
options.readOnly | 布尔值 |
|
此事务是否仅用于读取数据。用于确定 Sequelize 是否允许使用读取复制服务器。 |
options.logging | 函数 |
|
在运行查询时执行以记录 SQL 的函数。 |
autoCallback | 函数 |
|
回调使用事务对象调用,并应返回一个 Promise。如果 Promise 已解决,则事务提交;如果 Promise 拒绝,则事务回滚。 |
示例
try {
const transaction = await sequelize.transaction();
const user = await User.findOne(..., { transaction });
await user.update(..., { transaction });
await transaction.commit();
} catch {
await transaction.rollback()
}
try {
await sequelize.transaction(transaction => { // Note that we pass a callback rather than awaiting the call with no arguments
const user = await User.findOne(..., {transaction});
await user.update(..., {transaction});
});
// Committed
} catch(err) {
// Rolled back
console.error(err);
}
const cls = require('cls-hooked');
const namespace = cls.createNamespace('....');
const Sequelize = require('sequelize');
Sequelize.useCLS(namespace);
// Note, that CLS is enabled for all sequelize instances, and all instances will share the same namespace