基本用法-基本用法本系列文章的应用示例已发布在GitHub上:sequelize-docs-Zh-CN。您可以Fork以帮助改进或Star以关注更新。欢迎来到星空。要开始,您必须首先创建一个Sequelize实例。像这样:constsequelize=newSequelize('database','username'[,'password'])这将保存要传递的数据库凭据并提供所有进一步的方法。此外,您可以指定一个非默认主机或端口:constsequelize=newSequelize('database','username','password',{host:"my.server.tld",port:12345})如果您不这样做'tPassword:constsequelize=newSequelize('database','username')//或者constsequelize=newSequelize('database','username',null)也可以使用连接字符串:constsequelize=newSequelize('mysql://user:pass@example.com:9821/dbname',{//更多选项见下一节})options除了host和port,Sequelize还提供了很多选项。它们是:constsequelize=newSequelize('database','username','password',{//自定义主机;默认值:localhosthost:'my.server.tld',//自定义端口;默认值:3306port:12345,//自定义协议//-default:'tcp'//-version:v1.5.0//-postgresonly,forherokuprotocol:null,//disablelogging;default:console.loglogging:false,//数据库的sql方言//-目前支持:'mysql','sqlite','postgres','mssql'dialect:'mysql',//你也可以设置任何方言选项传递给底层方言库//-默认为空//-当前支持:'mysql'、'postgres'、'mssql'dialectOptions:{socketPath:'/Applications/MAMP/tmp/mysql/mysql.sock',supportBigNumbers:true,bigNumberStrings:true},//sqlite的存储引擎//-默认值':memory:'storage:'path/to/database.sqlite',//防止未定义的值被插入为NULL//-默认值:falseomitNull:true,//是否使用本机库的标志//if'pg'--设置为true以允许SSL支持//-默认值:falsenative:true,//在调用sequelize.define时指定要使用的选项//示例://define:{timestamps:false}//这基本上等同于://sequelize.define(name,attributes,{timestamps:falsese})//不需要像这样为每个定义设置时间戳选项//下面你会看到可能要设置的键。它们在本章中都有解释define:{underscored:falsefreezeTableName:false,syncOnAssociation:true,charset:'utf8',dialectOptions:{collat??e:'utf8_general_ci'},timestamps:true},//类似于同步:你可以definealwaysforcedsynchronizationmodelsync:{force:true},//aftereachassociationsync(seebelow)如果设置为false,则需要在设置所有关联后手动完成同步。Default:truesyncOnAssociation:true,//使用连接池减少数据库连接过载,提高速度//目前只支持mysql和postgresql(从v1.5.0开始)pool:{max:5,idle:30},//使用根据[lingoproject](https://github.com/visionmedia/lingo)确定如何将单词翻译成单数或复数//选项是:en[default],eslanguage:'en',//隔离级别对于每笔交易。默认为REPEATABLE_READ//可用选项://READ_UNCOMMITTED//READ_COMMITTED//REPEATABLE_READ//SERIALIZABLEisolationLevel:Transaction.ISOLATION_LEVELS.REPEATABLE_READ})提示:您可以通过传递方法为日志部分设置一个self定义方法。第一个参数是将被记录的字符串。ReadReplicationSequelize支持读复制,这意味着当你想执行一个SELECT查询时,你可以连接到多个服务器。当你读复制时,你指定一个或多个服务器作为读副本,一个服务器充当写主,它处理所有的写和更新,并将它们传播到副本(注意,实际的复制过程不是由Sequelize处理,但应在MySql中设置)。constsequelize=newSequelize('database',null,null,{dialect:'mysql',port:3306replication:{read:[{host:'8.8.8.8',username:'anotherusernamethanroot',password:'lolcats!'},{host:'localhost',username:'root',password:null}],write:{host:'localhost',username:'root',password:null}},pool:{//如果你想要覆盖读取池的选项,可以在这里完成max:20,idle:30000},})如果您有适用于所有副本的常规设置,则不需要为每个实例单独提供它们。在上面的代码中,数据库名称和端口被传播到所有副本。如果您将它们用于任何一个副本,用户和密码也是如此。每个副本都有以下选项:主机、端口、用户名、密码、数据库。Sequelize使用池来管理与副本的连接。默认选项是:{max:5,min:0,idle:10000,acquire:10000,evict:60000,handleDisconnects:true}如果你想修改这些,你可以在实例化Sequelize时将池作为选项传递,如如上所示。注意:读复制目前仅适用于MySQL!方言随着Sequelize1.6.0的发布,库可以独立于特定的方言。这意味着您必须自己将相应的连接器库添加到您的项目中。1.7.0稳定版已与连接器库(sequelize-mysql、sequelize-postgres等)捆绑在一起发布,但这些包没有维护,也不会向2.0.0发布。MySQL为了使Sequelize与MySQL完美配合,您需要安装mysql2@^1.0.0-rc.10或更高版本。完成后,您可以像这样使用它:constsequelize=newSequelize('database','username','password',{dialect:'mysql'})注意:您可以通过设置dialectOptions参数。有关示例,请参见选项(目前仅支持mysql)。SQLite为了与SQLite兼容,您需要sqlite3@~3.0.0。配置Sequelize如下:constsequelize=newSequelize('database','username','password',{//settosqlitedialect:'sqlite',//sqlitestorageengine//-default':memory:'storage:'path/to/database.sqlite'})或者你也可以使用连接字符串和路径:constsequelize=newSequelize('sqlite:/home/abs/path/dbname.db')constsequelize=newSequelize('sqlite:relativePath/dbname.db')PostgreSQLPostgreSQL的库是pg@^5.0.0||^6.0.0||^7.0.0你只需要定义方言:constsequelize=newSequelize('database','username','password',{//definedaspostgresdialect:'postgres'})MSSQLMSSQLlibraryistedious@^1.7.0你只需要定义方言:constsequelize=newSequelize('database','username','password',{dialect:'mssql'})ExecutingrawSQLqueries因为通常有一种简单的方法来执行原始/preparedSQL查询,可以使用“sequelize.query”函数。它是这样工作的://原始查询的参数sequelize.query('yourquery',[,options])//简单示例sequelize.query("SELECT*FROMmyTable").then(myTableRows=>{console.log(myTableRows)})//如果要返回一个sequelize实例,请使用model选项。//这样,您可以轻松地将查询映射到预定义的sequelize模型,例如:sequelize.query('SELECT*FROMprojects',{model:Projects}).then(projects=>{//每个记录现在将一个模型maptoprojects.console.log(projects)})//options是具有以下键的对象:sequelize.query('SELECT1',{//函数(或false)记录查询//每个发送的SQL查询到服务器端会调用logging:console.log,//如果plain为TRUE,sequelize只会返回结果集的第一条记录。//如果为FALSE,则为所有记录。plain:false,//Set如果您没有查询的模型定义,则为true。raw:false})//注意第二个参数为null!//即使我们在这里声明了一个called,raw:true也会替换并返回一个原始对象。sequelize中的替换.query('SELECT*FROMprojects',{raw:true}).then(projects=>{console.log(projects)})查询可以通过两种不同的方式完成:使用命名参数(以:),或unnamed使用的语法取决于传递给函数的替换选项:如果传递一个数组,?将按照它们在数组中出现的顺序被替换如果传递了一个对象,:key将被替换为对象键替换。如果未找到查询中包含的对象的键,则抛出异常,反之亦然。sequelize.query('SELECT*FROMprojectsWHEREstatus=?',{raw:true,replacements:['active']).then(projects=>{console.log(projects)})sequelize.query('SELECT*FROMprojectsWHEREstatus=:status',{raw:true,replacements:{status:'active'}}).then(projects=>{console.log(projects)})注意:如果表的属性名包含".",生成的对象会嵌套:sequelize.query('select1as`foo.bar.baz`').then(rows=>{console.log(JSON.stringify(rows))/*[{"foo":{"bar":{"baz":1}}}]*/})如果本文对您有帮助,请点赞或starGitHub:sequelize-docs-Zh-CN支持,谢谢。
