SQLALCHEMY在查询后启动模型类构造函数(__init__)

时间:2017-06-18 16:41:12

标签: python python-3.x sqlalchemy flask-sqlalchemy

我有一个简单的SQLALCHEMY模型,如:

class User(db.Model):
     """ User Model for storing user related details """
     __tablename__ = "users"

     UserID = db.Column(db.Integer, primary_key=True, autoincrement=True)
     Email = db.Column(db.String(255), unique=True, nullable=False)
     UserName = db.Column(db.String(255), unique=True, nullable=False)
     Password = db.Column(db.String(255), nullable=False)
     #bla....

     def __init__(self, email, username, password):
          # private
         self.__private = 'testing'
         # bla...

     def test(self):
         print self.__private

    # bla....

在我的应用中,我做了一个简单的查询:

user = User.query.filter((User.Email == req_email) | (User.UserName == req_username)).first()

问题:我打电话时

user.test()
它引发了我的错误:

  

'用户'对象没有属性'_User__private'

,因为我的私有变量从未在 init 函数中初始化。

问题:那么,如何在查询后启动类模型?

1 个答案:

答案 0 :(得分:0)

您需要使用load事件:

@event.listens_for(User, "load")
def set_private_after_load(target, context):
    target.__private = "testing"