2013-08-26 27 views
0

我被寫了一段代碼SQLAlchemy的類__init __()符合需要至少5個非關鍵字參數誤差

用戶類SQLAlcemy

##############models.py 
class User(Base,UserMixin): 
    __tablename__ = 'users' 
    id = Column(Integer, Sequence('seq_user_id'), primary_key=True) 
    name = Column(String(50), unique=True, index = True, nullable = False) 
    email = Column(String(120), unique=True, index = True, nullable = False) 
    password = Column(String(128), nullable = False) 
    registerdate = Column(Date, nullable = False) 

    def __init__(self, name, email, password, registerdate): 
     self.name = name 
     self.email = email 
     self.password = password 
     self.registerdate = datetime.datetime.now() 

    def __repr__(self): 
     return '<User %r>' % (self.name) 

    def is_authenticated(self): 
     return True 

    def is_active(self): 
     return True 

    def is_anonymous(self): 
     return False 

    def get_id(self): 
     return unicode(self.id) 

然後我寫了一些代碼創建測試用戶

############## frontend.py 
@app.route('/createuser') 
def createuser(): 
    user_jacky = User(name='jacky',email='[email protected]',password=md5.new('123').hexdigest()) 
    db_session.add(user_jacky) 
    db_session.commit() 
    return redirect(url_for('index')) 

當我訪問http://test.com/createuser時,系統告訴我「TypeError:init()至少需要5個非關鍵字參數(4 gi VEN)」。我再次讀取了SQLALchemy的文檔,這與我的代碼相同,不需要將價值傳遞給自己。發生了什麼?

回答

0

的問題是,__init__希望你在registerdate通過,但您沒有提供一個當__init__通過這條線叫:

User(name='jacky',email='[email protected]',password=md5.new('123').hexdigest()) 

如果registerdate應始終now(),你可以離開從參數:

def __init__(self, name, email, password): 
    self.name = name 
    self.email = email 
    self.password = password 
    self.registerdate = datetime.datetime.now() 

如果你希望能夠提供一個registerdate,但它應該默認爲now(),你可以這樣做:

def __init__(self, name, email, password, registerdate=None): 
    self.name = name 
    self.email = email 
    self.password = password 
    self.registerdate = registerdate or datetime.datetime.now() 
+0

哦,是的。我錯過了最後一個參數。我很粗心。謝謝! – user2674156

相關問題