首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对Sanic使用asyncpg连接池

对Sanic使用asyncpg连接池
EN

Stack Overflow用户
提问于 2018-04-23 18:11:31
回答 1查看 2K关注 0票数 4

我在网上整理了几个例子,想出了这个。这段代码可以工作,但我想知道是否有更好的方法来做到这一点?

代码语言:javascript
复制
user.py:


from asyncpg import create_pool
from sanic import Blueprint

bp = Blueprint('dp')

class pg:
    def __init__(self, pg_pool):
        self.pg_pool = pg_pool

    async def fetch(self, sql, *args, **kwargs):
        async with self.pg_pool.acquire() as connection:
            return await connection.fetch(sql, *args, **kwargs)

    async def execute(self, sql, *args, **kwargs):
        async with self.pg_pool.acquire() as connection:
            return await connection.execute(sql, *args, **kwargs)

@bp.listener('before_server_start')
async def init_pg(app, loop):
    """
    Init Postgresql DB.
    """
    bp.pg_pool = await create_pool(
        **app.config.PG_CFG,
        max_inactive_connection_lifetime=60,
        min_size=1,
        max_size=3,
        loop=loop,
    )
    bp.pg = pg(bp.pg_pool)
    print('-------- setup connection pool --------')

现在在webapp.py中使用pg类

代码语言:javascript
复制
webapp.py:


@app.route("/")
async def root(req):
    result = await app.pg.fetch('SELECT * FROM foo')
EN

回答 1

Stack Overflow用户

发布于 2018-04-24 16:14:18

我自己没有用postgres做过,但是我用Redis做过类似的事情。此外,我知道其他人也使用过类似的设置,使用before_server_start来创建池。

另一种选择是

看看:https://github.com/Skyscanner/aiotask-contexthttps://github.com/MagicStack/contextvars。也许它们可以帮助您将连接之类的东西附加到循环中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49978507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档