无法检查用户是否存在于 Postgres DB aiohttp 中

Can't check if user exist in Postgres DB aiohttp

在这里您可以看到 User 模型及其方法

class User:

    def __init__(self, db, data, *kw):
        self.db = db
        self.username = data[0]
        self.pass_hash = argon2.argon2_hash(data[1], salt=b'salty salt')

    async def check_user(self, **kw):
        async with self.db.acquire() as conn:
            user = await conn.execute(users.select().where(users.c.username == self.username))
        return user

    async def create_user(self, **kw):
        user = await self.check_user()
        if not user:
            async with self.db.acquire() as conn:
                await conn.execute(
                    users.insert().values(username=self.username,
                                          pass_hash=self.pass_hash))
            result = 'Success'
        else:
            result = 'User exists'
        return result

有两个功能,第一个是检查用户是否存在于数据库中,第二个是添加一个新用户到数据库中。所以主要问题是 create_user 功能正常工作,但如果我在那里添加 check_user,什么也不会发生。在下面查看我调用此函数的视图方法

async def signin(request):
    data = [request.rel_url.query['username'],
            request.rel_url.query['pass_hash']]

    user = User(request.app['db'], data)
    result = await user.create_user()
    if isinstance(result, ObjectId):
        return web.Response(content_type='application/json', text=convert_json(result))

谁能告诉我怎么了?日志是空的,我没有收到任何错误,但也没有任何反应。随意回答。谢谢大家

所以,主要问题是我需要做的就是更改查询并向在 check_user

中返回的 ResultProxy 对象添加一个属性
    async def check_user(self, **kw):
        async with self.db.acquire() as conn:
            s = sa.select([users]).where(users.c.username == self.username)
            return await conn.execute(s)

    async def create_user(self, **kw):
        user = await self.check_user()
        if not user.rowcount:
            async with self.db.acquire() as conn:
                await conn.execute(
                    users.insert().values(username=self.username,
                                          pass_hash=self.pass_hash))
            result = 'Success'
        else:
            result = 'User exists'
        return result