传递给 .values() 的所有值都会自动参数化。
例如,这个查询:
await db.insert(users).values({ name: 'Andrew' });将被翻译为:
insert into [users] ([name]) values (@par0); -- params: ['Andrew']传递给 .values() 的所有值都会自动参数化。
例如,这个查询:
await db.insert(users).values({ name: 'Andrew' });将被翻译为:
insert into [users] ([name]) values (@par0); -- params: ['Andrew']Drizzle ORM 为你提供了最接近 SQL 的方式来向数据库表中插入行。
使用 Drizzle 插入数据非常直接,而且很像 SQL。请看:
await db.insert(users).values({ name: 'Andrew' });insert into [users] ([name], [age]) values ('Andrew', default)如果你需要某个特定表的插入类型,可以使用 typeof usersTable.$inferInsert 语法。
type NewUser = typeof users.$inferInsert;
const insertUser = async (user: NewUser) => {
return db.insert(users).values(user);
}
const newUser: NewUser = { name: "Alef" };
await insertUser(newUser);MSSQL 支持 OUTPUT 子句用于返回已插入的行。Drizzle 通过 .output() 方法提供该功能。
const result = await db
.insert(usersTable)
.output({ id: usersTable.id })
.values([{ name: 'John' }, { name: 'John1' }]);
// ^? { id: number }[]你也可以通过不传参数调用 .output() 来返回所有已插入的列。
const result = await db.insert(usersTable).output().values({ name: 'John' });
// ^? typeof usersTable.$inferSelect[]await db.insert(users).values([{ name: 'Andrew' }, { name: 'Dan' }]);MSSQL 不支持 PostgreSQL 风格的 ON CONFLICT 或 MySQL 风格的 ON DUPLICATE KEY UPDATE 子句。对于插入更新工作流,请使用带有显式 select/update/insert 逻辑的事务,或使用 sql 运算符执行特定于方言的 MERGE 语句。
目前不支持