卧疾丰暇豫,翰墨时间作。这篇文章主要讲述sequelize.query 原始查询相关的知识,希望能为你提供帮助。
由于在很多情况下执行原始/已经准备好的SQL查询更加容易,因此可以使用该??sequelize.query??方法。
默认情况下,该函数将返回两个参数-一个结果数组和一个包含元数据的对象(例如,受影响的行数等)。请注意,由于这是原始查询,因此元数据特定于方言。一些方言将元数据“返回”到结果对象内(作为数组的属性)。但是,将始终返回两个参数,但对于MSSQL和mysql,它将是对同一对象的两个引用。
const [results, metadata] = await sequelize.query("UPDATE users SET y = 42 WHERE x = 12");
// Results will be an empty array and metadata will contain the number of affected rows.
在不需要访问元数据的情况下,可以传入查询类型以告诉序列化如何格式化结果。例如,对于一个简单的选择查询,您可以执行以下操作:
constQueryTypes= require(sequelize);
const users = await sequelize.query("SELECT * FROM `users`",type: QueryTypes.SELECT );
// We didnt need to destructure the result here - the results were returned directly
还有其他几种查询类型。??查阅源代码以获取详细信息??。
第二种选择是模型。如果您传递模型,则返回的数据将是该模型的实例。
// Callee is the model definition. This allows you to easily map a query to a predefined model
const projects = await sequelize.query(SELECT * FROM projects,
model: Projects,
mapToModel: true // pass true here if you have any mapped fields
);
// Each element of `projects` is now an instance of Project
请参阅??查询API参考??中的更多选项。一些例子:
constQueryTypes= require(sequelize);
await sequelize.query(SELECT 1,
// A function (or false) for logging your queries
// Will get called for every SQL query that gets sent
// to the server.
logging: console.log,
// If plain is true, then sequelize will only return the first
// record of the result set. In case of false it will return all records.
plain: false,
// Set this to true if you dont have a model definition for your query.
raw: false,
// The type of query you are executing. The query type affects how results are formatted before they are passed back.
type: QueryTypes.SELECT
);
// Note the second argument being null!
// Even if we declared a callee here, the raw: true would
// supersede and return a raw object.
console.log(await sequelize.query(SELECT * FROM projects,raw: true ));
“点分”属性和?
?nest?
?选项如果表的属性名称包含点,则通过设置??nest: true?
??选项,结果对象可以成为嵌套对象。这是通过使用??dottie.js??来实现的。见下文:- 没有?
?nest: true?
?:
constQueryTypes= require(sequelize);
const records = await sequelize.query(select 1 as `foo.bar.baz`,
type: QueryTypes.SELECT
);
console.log(JSON.stringify(records[0], null, 2));
"foo.bar.baz": 1
- 与?
?nest: true?
?:
constQueryTypes= require(sequelize);
const records = await sequelize.query(select 1 as `foo.bar.baz`,
nest: true,
type: QueryTypes.SELECT
);
console.log(JSON.stringify(records[0], null, 2));
"foo":
"bar":
"baz": 1
替代品查询中的替换可以通过两种不同的方式来完成,或者使用命名参数(以开头?
?:?
??),也可以使用以表示的未命名参数????
?。替换项在options对象中传递。- 如果传递了数组,?
???
?则将按照它们在数组中出现的顺序进行替换 - 如果传递了一个对象,?
?:key?
?则将替换为该对象中的键。如果对象包含在查询中找不到的键,反之亦然,则将引发异常。
constQueryTypes= require(sequelize);
await sequelize.query(
SELECT * FROM projects WHERE status = ?,
replacements: [active],
type: QueryTypes.SELECT
);
await sequelize.query(
SELECT * FROM projects WHERE status = :status,
replacements:status: active ,
type: QueryTypes.SELECT
);
数组替换将被自动处理,以下查询将搜索状态与值数组匹配的项目。
constQueryTypes= require(sequelize);
await sequelize.query(
SELECT * FROM projects WHERE status IN(:status),
replacements:status: [active, inactive] ,
type: QueryTypes.SELECT
);
要使用通配符运算符?
?%?
?,请将其附加到您的替代字符中。以下查询将用户名称以“ ben”开头的用户进行匹配。constQueryTypes= require(sequelize);
await sequelize.query(
SELECT * FROM users WHERE name LIKE :search_name,
replacements:search_name: ben% ,
type: QueryTypes.SELECT
);
绑定参数绑定参数就像替换。在查询发送到数据库之前,通过替换将替换内容转义并插入到查询中,而将绑定参数发送到SQL查询文本之外的数据库中,则将绑定参数发送到数据库中。查询可以具有绑定参数或替换参数。绑定参数由$ 1,$ 2,...(数字)或$ key(字母数字)引用。这与方言无关。
- 如果传递了数组,?
?$1?
??则绑定到数组(??bind[0]?
?)中的第一个元素 - 如果传递了一个对象,?
?$key?
??则绑定到??object[key]?
??。每个键必须以非数字字符开头。??$1?
??不是有效的密钥,即使??object[1]?
?存在也是如此。 - 无论哪种情况,?
?$$?
??都可以用来转义文字??$?
?符号。
【sequelize.query 原始查询】数据库可能对此增加了更多限制。绑定参数不能是SQL关键字,也不能是表名或列名。在带引号的文本或数据中也将忽略它们。在PostgreSQL中,如果无法从context推断出类型,可能还需要对它们进行类型转换?
?$1::varchar?
?。constQueryTypes= require(sequelize);
await sequelize.query(
SELECT *, "text with literal $$1 and literal $$status" as t FROM projects WHERE status = $1,
bind: [active],
type: QueryTypes.SELECT
);
await sequelize.query(
SELECT *, "text with literal $$1 and literal $$status" as t FROM projects WHERE status = $status,
bind:status: active ,
type: QueryTypes.SELECT
);
推荐阅读
- JavaScript 获取当前周数
- Mybatis-----查询结果合并成集合
- SQLServer tempdb 数据库文件迁移到D盘
- css3 监控横屏,内容旋转90度
- 如何查看请求回来的JSON数据
- 如何设置导出excel的格式
- JavaScript 时间戳格式化为日期或时间
- ExtJs上传文件
- traceroute/tracert--获取网络路由路径