查询代理器
查询客户端 在 连接 和 查询构建器 之间沟通以执行数据库查询。 此外,它还公开了查询构建器用于将读取查询定向到只读副本并写入写入副本所需的 API。
你可以通过以下方式访问查询客户端:
import Database from '@ioc:Adonis/Lucid/Database'
// 返回默认连接的客户端
const client = Database.connection()
// 返回一个命名连接的客户端
const pgClient = Database.connection('pg')
方法/属性
以下是查询客户端类上可用的方法和属性的列表。
查询
为预选的数据库连接返回 查询构建器 的实例。
client.query()
你还可以使用 from
别名来实例化一个新的查询实例并选择表。
client.from('users')
insertQuery
为预选的数据库连接返回 插入查询构建器 的实例。
client.insertQuery()
你还可以使用 table
别名来实例化一个新的查询实例并选择表。
client.table('users')
modelQuery
返回给定 Lucid 模型的 模型查询构建器 的实例。
import User from 'App/Models/User'
const query = client.modelQuery(User)
const user = await query.first()
console.log(user instanceof User) // true
rawQuery
为预选的数据库连接返回 原始查询构建器 的实例。
await client
.rawQuery('select * from users where id = ?', [1])
knexQuery
为预选的数据库连接返回 Knex.js 查询构建器 的实例。
client.knexQuery().select('*')
knexRawQuery
为预选的数据库连接返回 Knex.js 原始查询构建器 的实例。
client
.knexRawQuery('select * from users where id = ?', [1])
transaction
创建一个新的 事务客户端 实例。 事务客户端立即保留一个专用数据库连接,因此正确提交或回滚事务非常重要。
const trx = await client.transaction()
await trx.insertQuery().table('users').insert()
await trx.commit()
getAllTables
返回所有数据库表的数组。
const tables = await client.getAllTables()
console.log(tables)
getAllViews
返回所有数据库视图的数组。
const views = await client.getAllViews()
console.log(views)
getAllTypes
返回所有数据库自定义类型的数组。 该方法仅适用于 Postgres 和 Redshift。
const types = await client.getAllTypes()
console.log(types)
columnsInfo
返回给定数据库表中的列键值对。
const columns = await client.columnsInfo('users')
console.log(columns)
dropAllTables
删除数据库中的所有表。
await client.dropAllTables()
// 指定模式(用于 Postgres 和 Redshift)
await client.dropAllTables(['public'])
dropAllViews
删除数据库中的所有视图。
await client.dropAllViews()
// 指定模式(用于 Postgres 和 Redshift)
await client.dropAllViews(['public'])
dropAllTypes
删除数据库中的所有自定义类型。 该方法仅适用于 Postgres 和 Redshift。
await client.dropAllTypes()
truncate
截断数据库表。 或者,你还可以级联外键引用。
await client.truncate('users')
// 级联
await client.truncate('users', true)
getReadClient
返回只读副本的 Knex.js 实例。 不使用读/写副本时返回写客户端。
const knex = client.getReadClient()
getWriteClient
返回写入副本的 Knex.js 实例。 在读取模式下实例化客户端时会引发异常。
const knex = client.getWriteClient()
getAdvisoryLock
调用 getAdvisoryLock
会在 PostgreSQL 和 MySQL 数据库中获得咨询锁。
数据库迁移使用咨询锁来防止多个进程同时迁移数据库。
await client.getAdvisoryLock('key_name')
// 自定义超时
await client.getAdvisoryLock('key_name', 2000)
releaseAdvisoryLock
释放先前获得的咨询锁
await client.releaseAdvisoryLock('key_name')
raw
创建一个原始引用查询实例。 使用 raw
方法生成的查询只能作为其他查询的参考,不能独立执行。
await client.from(
client.raw('select ip_address from user_logins')
)
mode
一个只读属性,用于了解创建客户端实例的模式。 它始终是以下之一
dual
:支持读/写查询,并将被定向到正确的副本。write
:读查询也将被发送到write
副本。read
:不能执行写查询。
console.log(client.mode)
dialect
参考底层数据库方言。 每个受支持的数据库驱动程序都有自己的方言。
console.log(client.dialect.name)
isTransaction
查找客户端是否为事务客户端。 对于查询客户端,该值始终为“false”。
client.isTransaction
connectionName
为其实例化查询客户端的连接名称
client.connectionName
debug
将值设置为 true
以启用查询客户端执行的查询的调试。
client.debug = true
await client.from('users').select('*')
schema
返回对 schema builder 的引用。 client.schema
是一个 getter,每次访问该属性时都会返回一个新实例
await client.schema.createTable('users', (table) => {
})
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。