跳至主要內容
版本:v6 - stable

各資料庫方言的特定事項

底層連線器函式庫

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 存在安全漏洞,如果無法更新至 sqlite3@^5.0.3,建議使用 @vscode/sqlite3 分支。

您可以使用 storage 選項在 Sequelize 建構函式中指定儲存檔案(使用 :memory: 取得記憶體中的 SQLite 實例)。

您可以使用 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 網域 Socket 連線,請在 host 選項中指定 Socket 目錄的路徑。Socket 路徑必須以 / 開頭。

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 String、網路服務名稱或連線描述元傳遞至 Sequelize 建構函式

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

請注意,databasehostport 將被覆寫,連線字串中的值將用於驗證。

如需有關連線字串的更多資訊,請參閱 連線字串

資料類型: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 名稱必須遵循此模式 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

有關原始 API 提案,請參閱 Issue #9421

引擎 - 僅限 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() 時,將會設定註解。