我正在试验一个独立的脚本,该脚本将使用 Vapor 和 Fluent 查询 Postgres 数据库。在普通的 Vapor API 应用程序中,这只需通过以下方式完成:
router.get("products") { request in
return Product.query(on: request).all()
}
Run Code Online (Sandbox Code Playgroud)
然而,在一个独立的脚本中,由于没有“请求”,我陷入了用什么来替换“请求”的问题DatabaseConnectable上。这是我陷入困境的地方:
import Fluent
import FluentPostgreSQL
let databaseConfig = PostgreSQLDatabaseConfig(hostname: "localhost",
username: "test",
database: "test",
password: nil)
let database = PostgreSQLDatabase(config: databaseConfig)
let foo = Product.query(on: <??WhatDoIPutHere??>)
Run Code Online (Sandbox Code Playgroud)
我尝试创建一个符合 的对象DatabaseConnectable,但无法弄清楚如何正确地使该对象符合 。
您将需要创建一个事件循环组才能发出数据库请求。SwiftNIOMultiThreadedEventLoopGroup对此很有用:
let worker = MultiThreadedEventLoopGroup(numberOfThreads: 2)
Run Code Online (Sandbox Code Playgroud)
您可以根据需要更改使用的线程数。
现在您可以使用该工作程序创建与数据库的连接:
let conn = try database.newConnection(on: worker)
Run Code Online (Sandbox Code Playgroud)
连接是未来的,因此您可以map在查询中传递连接:
conn.flatMap { connection in
return Product.query(on: connection)...
}
Run Code Online (Sandbox Code Playgroud)
确保在完成工作后关闭工作程序shutdownGracefully(queue:_:)
| 归档时间: |
|
| 查看次数: |
350 次 |
| 最近记录: |