SQLAlchemy 如何支持model类执行初始化构造函数__init__(默认情况下是不会调用__init__,必须加装饰器@orm.reconstructor)

关于装饰器@orm.reconstructor介绍:https://docs.sqlalchemy.org/en/latest/orm/constructors.html?highlight=reconstructor#sqlalchemy.orm.reconstructor

 

如果是正常的User()创建实例对象的方式是会执行__init__的,
但是数据库SQLachemy创建就不是这样调用,必须在要调用的方法上打个装饰器才可以调用

user = User.query_one_data_or_404(User,id=1)
name = user.api_name

 

class User(Base):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    nickname = db.Column(db.String(24), nullable=False)
    auth = db.Column(db.Integer, default=1)
    mobile = db.Column(db.String(18), unique=True, nullable=True)
    email = db.Column(db.String(50), unique=True, nullable=False)
    __secretkey = db.Column("password", db.String(256), nullable=True)


    1、orm.reconstructor装饰器的作用:兼容SQLachemy-ORM数据库模式创建user实例对象能去调用__init__方法
    2、SQLachemy-ORM创建user【如:查询】不是通过传统的User()创建,所以默认情况下不会调用__init__方法
    3、对于普通的User()创建对象,此装饰器不影响正常初始化调用!
    4、更多细节参考SQLachemy官方文档
    @orm.reconstructor
    def __init__(self):
        self.api_name = ["id", "nickname", "mobile", "email"]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值