2017-06-18 115 views
0

後啓動模型類的構造函數(__init__)我有這樣一個簡單的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' object has no attribute '_User__private'

,因爲我的私有變量從未在初始化中初始化函數。

問題:那麼,如何在查詢後調用類模型呢?

回答

0

您需要使用load事件:

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

是不是也有在['@ orm.reconstructor'(http://docs.sqlalchemy.org/en/latest/orm/constructors .html)簡寫/幫手嗎?不是說它明顯不同於使用加載事件。 –