关于装饰器@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"]