从连接池中获取连接,然后在连接上调用execute
的使用场景有哪些?相比直接在连接池对象上调用execute
,这样做有什么好处?
Pool 类的文档中给出了如下示例:
con = await pool.acquire()
try:
await con.execute(...)
finally:
await pool.release(con)
从池中获取连接并用于执行语句。与直接在
Pool
对象上调用execute
方法相比,这样做的好处是什么?async with asyncpg.create_pool(user=pg_user,
password=pg_pass,
host=pg_host,
port=pg_port,
database=pg_db,
command_timeout=60) as pool:
pool.execute(f'TRUNCATE TABLE {table};')
Pool.execute
的文档甚至声明了以下内容:
执行SQL命令(或一组命令)。
池使用其中一个连接来执行此操作。除此之外,它的行为与
Connection.execute()
相同。
Pool.execute
会立即打开和关闭一个事务。而在连接对象上执行(Connection.execute
)则允许更自由地决定在单个连接上提交(或回滚)什么。如果没有在上下文管理器中调用Connection.execute
呢?那么这两种方法(Connection.execute
和Pool.execute
)本质上是相同的吗? - Ryanconn.execute
都会在自己的事务中立即执行吗? - Ryanconn.transaction()
。我已经更新了回答。 - decorator-factory