使用sqlalchemy模型创建时间务必注意【一个很大的坑】,为什么时间永远都不变

 温馨提示:使用sqlalchemy模型创建时间务必注意【一个很大的坑】


                参数:
                    create_time:必须在__init__方法中初始化当前时间now,因为这里每一次创建和读取的时间都是最新的!
                        务必注意:不能再创建字段的时候使用default=UtilsDatatime.get_now_time_strftime()的原因:
                 default默认赋值仅会调用一次,也就是说now时间获取一次之后,后续所有的实例都会copy第一次的值进行default赋值 

   class OwnBaseModel(db.Model, ClassIterator):

        """
            1、Flask-SQLAlchemy创建table时,如何声明基类(这个类不会创建表,可以被继承)
            2、方法就是把__abstract__这个属性设置为True,这个类为基类,不会被创建为表!
            3、只要设置了__abstract__ = True,这个基类无法实现relationship关联方法【只能由子类继承去关联】
        """
        __abstract__ = True

        id = db.Column(db.Integer, primary_key=True, autoincrement=True)
        create_time = db.Column(db.String(20), nullable=True)
        status = db.Column(db.Integer, default=1)

        # 1、orm.reconstructor装饰器的作用:兼容SQLachemy-ORM数据库模式创建user实例对象能去调用__init__方法
        # 2、SQLachemy-ORM创建user【如:查询】不是通过传统的User()创建,所以默认情况下不会调用__init__方法
        # 3、对于普通的User()创建对象,此装饰器不影响正常初始化调用!
        @orm.reconstructor
        def __init__(self):
            # super仅会调用第一个父类db.Model的方法
            super().__init__()
            # 第二个父类开始,类名.方法名(self)的方式来调用!
            ClassIterator.__init__(self)
            self.iter_keys = ["id", "create_time", "status"]
            """
                温馨提示:使用sqlalchemy模型创建时间务必注意【一个很大的坑】
                参数:
                    create_time:必须在__init__方法中初始化当前时间now,因为这里每一次创建和读取的时间都是最新的!
                        务必注意:不能再创建字段的时候使用default=UtilsDatatime.get_now_time_strftime()的原因:
                        default默认赋值仅会调用一次,也就是说now时间获取一次之后,后续所有的实例都会copy第一次的值进行default赋值
                        总结来说:default只能赋值静态值,不能获取动态值
                    另外注意:每一次存储或读取都会执行初始化,为了显示时间和数据库一致,如果数据库的时间存在就选择数据库的时间为准!
            """
            self.create_time = self.create_time or UtilsDatatime.get_now_time_strftime()

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值