跳至主要内容
版本:v6 - 稳定版

特定方言的功能

底层连接器库

MySQL

Sequelize 用于 MySQL 的底层连接器库是 mysql2 npm 包(版本 1.5.2 或更高版本)。

您可以使用 Sequelize 构造函数中的 dialectOptions 为其提供自定义选项。

const sequelize = new Sequelize('database', 'username', 'password', {
dialect: 'mysql',
dialectOptions: {
// Your mysql2 options here
},
});

dialectOptions 直接传递给 MySQL 连接构造函数。完整的选项列表可以在 MySQL 文档 中找到。

MariaDB

Sequelize 用于 MariaDB 的底层连接器库是 mariadb npm 包。

您可以使用 Sequelize 构造函数中的 dialectOptions 为其提供自定义选项。

const sequelize = new Sequelize('database', 'username', 'password', {
dialect: 'mariadb',
dialectOptions: {
// Your mariadb options here
// connectTimeout: 1000
},
});

dialectOptions 直接传递给 MariaDB 连接构造函数。完整的选项列表可以在 MariaDB 文档 中找到。

SQLite

Sequelize 用于 SQLite 的底层连接器库是 sqlite3 npm 包(版本 4.0.0 或更高版本)。
由于 sqlite3@^4 存在安全漏洞,建议使用 @vscode/sqlite3 分支,如果无法更新到 sqlite3@^5.0.3。

您可以在 Sequelize 构造函数中使用 storage 选项指定存储文件(对于内存中的 SQLite 实例,请使用 :memory:)。

您可以使用 Sequelize 构造函数中的 dialectOptions 为其提供自定义选项。

import { Sequelize } from 'sequelize';
import SQLite from 'sqlite3';

const sequelize = new Sequelize('database', 'username', 'password', {
dialect: 'sqlite',
storage: 'path/to/database.sqlite', // or ':memory:'
dialectOptions: {
// Your sqlite3 options here
// for instance, this is how you can configure the database opening mode:
mode: SQLite.OPEN_READWRITE | SQLite.OPEN_CREATE | SQLite.OPEN_FULLMUTEX,
},
});

以下字段可以传递给 SQLite dialectOptions

  • mode:设置 SQLite 连接的打开模式。潜在的值由 sqlite3 包提供,可以包括 SQLite.OPEN_READONLYSQLite.OPEN_READWRITESQLite.OPEN_CREATE
    有关更多详细信息,请参阅 sqlite3 的 API 参考SQLite C 接口文档

PostgreSQL

Sequelize 用于 PostgreSQL 的底层连接器库是 pg 包(对于 Node 10 和 12,请使用 pg 版本 7.0.0 或更高版本。对于 Node 14 及更高版本,您需要使用 pg 版本 8.2.x 或更高版本,根据 pg 文档)。模块 pg-hstore 也是必需的。

您可以使用 Sequelize 构造函数中的 dialectOptions 为其提供自定义选项。

const sequelize = new Sequelize('database', 'username', 'password', {
dialect: 'postgres',
dialectOptions: {
// Your pg options here
},
});

以下字段可以传递给 Postgres dialectOptions

  • application_name:pg_stat_activity 中应用程序的名称。有关详细信息,请参阅 Postgres 文档
  • ssl:SSL 选项。有关详细信息,请参阅 pg 文档
  • client_encoding:// 设置“auto”根据客户端 LC_CTYPE 环境变量确定语言环境。有关详细信息,请参阅 Postgres 文档
  • keepAlive:启用 TCP KeepAlive 的布尔值。有关详细信息,请参阅 pg 变更日志
  • statement_timeout:以毫秒为单位设置查询超时时间。在 pg v7.3 中添加。有关详细信息,请参阅 Postgres 文档
  • idle_in_transaction_session_timeout:终止任何空闲时间超过指定持续时间(以毫秒为单位)且具有打开事务的会话。有关详细信息,请参阅 Postgres 文档

要通过 Unix 域套接字连接,请在 host 选项中指定套接字目录的路径。套接字路径必须以 / 开头。

const sequelize = new Sequelize('database', 'username', 'password', {
dialect: 'postgres',
host: '/path/to/socket_directory',
});

Sequelize 中的默认 client_min_messages 配置为 WARNING

Redshift

大多数配置与上面的 PostgreSQL 相同。

Redshift 不支持 client_min_messages,需要使用“ignore”来跳过配置。

const sequelize = new Sequelize('database', 'username', 'password', {
dialect: 'postgres',
dialectOptions: {
// Your pg options here
// ...
clientMinMessages: 'ignore', // case insensitive
},
});

Microsoft SQL Server (MSSQL)

Sequelize 用于 MSSQL 的底层连接器库是 tedious npm 包(版本 6.0.0 或更高版本)。

您可以使用 Sequelize 构造函数中的 dialectOptions.options 为其提供自定义选项。

const sequelize = new Sequelize('database', 'username', 'password', {
dialect: 'mssql',
dialectOptions: {
// Observe the need for this nested `options` field for MSSQL
options: {
// Your tedious options here
useUTC: false,
dateFirst: 1,
},
},
});

完整的选项列表可以在 tedious 文档 中找到。

MSSQL 域帐户

要使用域帐户连接,请使用以下格式。

const sequelize = new Sequelize('database', null, null, {
dialect: 'mssql',
dialectOptions: {
authentication: {
type: 'ntlm',
options: {
domain: 'yourDomain',
userName: 'username',
password: 'password',
},
},
options: {
instanceName: 'SQLEXPRESS',
},
},
});

Snowflake(实验性)

Sequelize 用于 Snowflake 的底层连接器库是 snowflake-sdk npm 包。

要使用帐户连接,请使用以下格式。

const sequelize = new Sequelize('database', null, null, {
dialect: 'snowflake',
dialectOptions: {
// put your snowflake account here,
account: 'myAccount', // my-app.us-east-1

// below option should be optional
role: 'myRole',
warehouse: 'myWarehouse',
schema: 'mySchema',
},
// same as other dialect
username: 'myUserName',
password: 'myPassword',
database: 'myDatabaseName',
});

注意 没有提供测试沙箱,因此 Snowflake 集成测试不是管道的一部分。此外,核心团队难以进行分类和调试。目前,此方言需要由 Snowflake 用户/社区维护。

运行集成测试

SEQ_ACCOUNT=myAccount SEQ_USER=myUser SEQ_PW=myPassword SEQ_ROLE=myRole SEQ_DB=myDatabaseName SEQ_SCHEMA=mySchema SEQ_WH=myWareHouse npm run test-integration-snowflake

Oracle 数据库

Sequelize 用于 Oracle 的底层连接器库是 node-oracledb 包。
请参阅 版本 以查看支持哪些版本的 Oracle 数据库和 node-oracledb。

node-oracledb 需要 Oracle Instant Client 才能工作。您可以使用 node-oracledb 的 快速入门 链接进行安装。

以下是带有与 Oracle 数据库相关参数的 Sequelize 构造函数。

const sequelize = new Sequelize('servicename', 'username', 'password', {
dialect: 'oracle',
host: 'hostname',
port: 'port number', //optional
});

Oracle 数据库的默认端口号为 1521。

Sequelize 还允许您以 URL 格式传递凭据。

const sequelize = new Sequelize('oracle://user:pass@hostname:port/servicename');

您可以使用 dialectOptions.connectString 将 Easy Connect 字符串、网络服务名称或连接描述符传递给 Sequelize 构造函数。

const sequelize = new Sequelize({
dialect: 'oracle',
username: 'user',
password: 'password',
dialectOptions: {
connectString: 'inst1',
},
});

请注意,databasehostport 将被覆盖,并且 connectString 中的值将用于身份验证。

有关连接字符串的更多信息,请参阅 连接字符串

数据类型:TIMESTAMP WITHOUT TIME ZONE - 仅限 PostgreSQL

如果您正在使用 PostgreSQL 的 TIMESTAMP WITHOUT TIME ZONE 并且需要将其解析为不同的时区,请使用 pg 库自己的解析器。

require('pg').types.setTypeParser(1114, stringValue => {
return new Date(stringValue + '+0000');
// e.g., UTC offset. Use any offset that you would like.
});

数据类型:ARRAY(ENUM) - 仅限 PostgreSQL

Array(Enum) 类型需要特殊处理。每当 Sequelize 与数据库通信时,它都必须使用 ENUM 名称对数组值进行类型转换。

因此,此枚举名称必须遵循以下模式 enum_<table_name>_<col_name>。如果您使用的是 sync,则将自动生成正确的名称。

表提示 - 仅限 MSSQL

tableHint 选项可用于定义表提示。提示必须是 TableHints 中的值,并且仅在绝对必要时使用。每个查询当前仅支持单个表提示。

表提示通过指定某些选项来覆盖 MSSQL 查询优化器的默认行为。它们仅影响该子句中引用的表或视图。

const { TableHints } = require('sequelize');
Project.findAll({
// adding the table hint NOLOCK
tableHint: TableHints.NOLOCK,
// this will generate the SQL 'WITH (NOLOCK)'
});

索引提示 - 仅限 MySQL/MariaDB

indexHints 选项可用于定义索引提示。提示类型必须是 IndexHints 中的值,并且这些值应引用现有索引。

索引提示 覆盖 MySQL 查询优化器的默认行为

const { IndexHints } = require('sequelize');
Project.findAll({
indexHints: [{ type: IndexHints.USE, values: ['index_project_on_name'] }],
where: {
id: {
[Op.gt]: 623,
},
name: {
[Op.like]: 'Foo %',
},
},
});

以上将生成如下所示的 MySQL 查询。

SELECT * FROM Project USE INDEX (index_project_on_name) WHERE name LIKE 'FOO %' AND id > 623;

Sequelize.IndexHints 包括 USEFORCEIGNORE

请参阅 问题 #9421 以了解原始 API 提案。

引擎 - 仅限 MySQL/MariaDB

模型的默认引擎为 InnoDB。

您可以使用 engine 选项更改模型的引擎(例如,更改为 MyISAM)。

const Person = sequelize.define(
'person',
{
/* attributes */
},
{
engine: 'MYISAM',
},
);

与模型定义的所有选项一样,此设置也可以使用 Sequelize 构造函数的 define 选项全局更改。

const sequelize = new Sequelize(db, user, pw, {
define: { engine: 'MYISAM' },
});

表注释 - 仅限 MySQL/MariaDB/PostgreSQL

在定义模型时,您可以为表指定注释。

class Person extends Model {}
Person.init(
{
/* attributes */
},
{
comment: "I'm a table comment!",
sequelize,
},
);

调用 sync() 时将设置注释。