# -*- coding: utf-8 -*-
# !/usr/bin/env python
# Software: PyCharm
# __author__ == "YU HAIPENG"
# fileName: asyncpostgres.py
# Month: 六月
# time: 2021/6/21 18:33
""" 官方文档 https://www.postgresql.org/docs/devel/functions-json.html """
from functools import wraps
from asyncpg import create_pool
from asyncio import Lock
create_pool_look = Lock()
def init_decorator():
def decorator(func):
@wraps(func)
async def wrapper(self, *args, **kwargs):
transaction = kwargs.pop("transaction", None) or self.transaction
await self.create_pool(**self.params)
async with self._pool.acquire(timeout=self.acquire_timeout) as con:
if transaction:
isolation = kwargs.pop("isolation", None)
readonly = kwargs.pop("readonly", False)
deferrable = kwargs.pop("deferrable", False)
async with con.transaction(isolation=isolation, readonly=readonly, deferrable=deferrable):
n = await func(self, __conn__=con, *args, **kwargs)
else:
n = await func(self, __conn__=con, *args, **kwargs)
return n
return wrapper
return decorator
class AsyncPostGre:
def __init__(
self,
dsn=None, *, min_size=10, max_size=10,
max_queries=50000, max_inactive_connection_lifetime=300.0, setup=None, init=None,
loop=None, host=None, port=None, user=None, password=None, command_timeout=360,
database=None, transaction=False, acquire_timeout=360, **connect_kwargs):
# dsn = "postgres://user:pass@host:port/database?option=value"
"""
@param dsn:
@param min_size:
@param max_size:
@param max_queries:
@param max_inactive_connection_lifetime:
@param setup:
@param init:
@param loop:
@param host:
@param port:
@param user:
@param password:
异步asyncpg
最新推荐文章于 2024-05-26 15:46:37 发布