我有以下代码用于建立PG连接。
class Engine:
@property
async def engine(self):
self._engine = await asyncpg.create_pool(PG_URI)
return self._engine
@async_generator.asynccontextmanager
async def transaction(self, *args, **kwargs):
engine = self.engine
conn = await self.engine()
async with conn.acquire() as txn:
await txn.execute("EXECUTE-SOMETHING-TO CHANGE PG TIMEEOUT")
yield txn
def __call__(self):
"""Retry a transaction on an OperationalError."""
def t(f):
@wraps(f)
async def g(*args, **kwargs):
async with self.transaction(f.__name__) as txn:
return f(txn, *args, **kwargs)
return g
return t
在另一个模块中,请输入model.py
engine = Engine()
@engine()
async def retry_delivery(txn):
try:
result = await txn.fetchrow("EXECUTE SOME QUERY")
if result is None:
return []
else:
return [dict(result)["id"]]
finally:
txn.close()
当我尝试致电retry_delivery
时,出现错误TypeError: 'coroutine' object is not iterable
。
经过大量搜寻后,我到达了这一点。请提出我错了的地方或任何更好的实现方法。谢谢!