SQL тег
Эта страница переведена PageTurner AI (бета). Не одобрена официально проектом. Нашли ошибку? Сообщить о проблеме →
TypeORM позволяет писать SQL-запросы с использова нием шаблонных литералов, автоматически обрабатывая параметры в зависимости от типа вашей базы данных. Эта функция помогает предотвращать SQL-инъекции, делая запросы более читаемыми. SQL-тег реализован как обёртка над методом .query, предоставляя альтернативный интерфейс с сохранением базового функционала.
Базовое использование
Тег sql доступен для экземпляров DataSource, EntityManager, Repository и QueryRunner:
const users = await dataSource.sql`SELECT * FROM users WHERE name = ${"John"}`
Обработка параметров
Параметры автоматически экранируются и форматируются согласно типу вашей СУБД:
- PostgreSQL, CockroachDB, Aurora PostgreSQL используют
$1,$2и т.д.:
// Query becomes: SELECT * FROM users WHERE name = $1
const users = await dataSource.sql`SELECT * FROM users WHERE name = ${"John"}`
- MySQL, MariaDB, Aurora MySQL, SAP, SQLite используют
?:
// Query becomes: SELECT * FROM users WHERE name = ?
const users = await dataSource.sql`SELECT * FROM users WHERE name = ${"John"}`
- Oracle использует
:1,:2и т.д.:
// Query becomes: SELECT * FROM users WHERE name = :1
const users = await dataSource.sql`SELECT * FROM users WHERE name = ${"John"}`
- MSSQL использует
@1,@2и т.д.:
// Query becomes: SELECT * FROM users WHERE name = @1
const users = await dataSource.sql`SELECT * FROM users WHERE name = ${"John"}`
Несколько параметров
Вы можете использовать несколько параметров и сложные выражения:
const name = "John"
const age = 30
const active = true
const users = await dataSource.sql`
SELECT * FROM users
WHERE name LIKE ${name + "%"}
AND age > ${age}
AND is_active = ${active}
`
Раскрытие списков параметров
Чтобы преобразовать массив значений в динамический список параметров в шаблонном выражении, оберните массив в функцию. Это особенно полезно для выражений IN (...), где каждое значение списка должно передаваться как отдельный параметр:
// Query becomes: SELECT * FROM users WHERE id IN (?, ?, ?)
const users = await dataSource.sql`
SELECT * FROM users
WHERE id IN (${() => [1, 2, 3]})
`