tornado peewee_async异步编程需要注意的几个事项

异步编程中使用了同步操作,一般会报:

AssertionError: Error, sync query is not allowed! Call the `.set_allow_sync()` or use the `.allow_sync()` context manager.

以下罗列一些常见的操作错误:

当model类有外键时,怎么处理?

model类中使用的是peewee_async的database,异步驱动对象,

而你调用外键对象的属性时,id = message.sender.id 或者 id = message.sender都会报错

外键模型类对象会调用peewee的方法,而peewee是同步ORM库,所以会报错

解决办法有两种:

第一种:在模型类中定义一个extend 类方法,使用join子句关联外键对象,生成一个预处理query sql对象,这样也可以使用:

id = message.sender.id

@classmethod

    def extend(cls):

        return cls.select(cls, User.id, User.nick_name).join(User)

第二种:使用管理类的filter方法,生成一个query对象,但不可以使用id = message.sender.id,只能使用这种形式

id=message.sender_id 再由send_id来查询出对应的User对象

message_query = Message.filter(Message.receiver_id == self.current_user.id)


            
            

本博客源码Github地址:

https://github.com/whisnos/myblog

请随手给个star,谢谢!

打赏

评论