2013-07-22 81 views
0

這是我第一次使用SQLalchemy。我創建了一個時事類/表:SQLalchemy中的參數錯誤

class Newsletter(Base): 
    __tablename__ = 'newsletter' 

    email = Column(String(255), primary_key=True) 
    timestamp = Column(DateTime(timezone=False), default=datetime.utcnow, 
         server_default=expression.func.now()) 

    def __repr__(self): 
     return '''<Newsletter('{email}', registered on: '{date}')> 
       '''.format(email=self.email, 
          date=self.timestamp) 

if__name__=='__main__': 
    foobar = Newsletter('[email protected]') 

但隨後收到此錯誤:

TypeError: init() takes exactly 1 argument (2 given)

全碼:http://dpaste.com/1313680

據早些時候的工作,我已經嘗試了一堆不同突變以使其發揮作用;無濟於事。

回答

1

您正在繼承基類中的__init__方法,該類只允許一個參數self。你可能想要改變你的課程。

class Newsletter(Base): 
    __tablename__ = 'newsletter' 

    email = Column(String(255), primary_key=True) 
    timestamp = Column(DateTime(timezone=False), default=datetime.utcnow, 
         server_default=expression.func.now()) 

    def __init__(self, email): 
     self.emailID = email 

    def __repr__(self): 
     return '''<Newsletter('{email}', registered on: '{date}')> 
       '''.format(email=self.email, 
          date=self.timestamp) 

編輯 - 不是使NewsLetter類的內部構造的,你可以在一個函數傳遞給declarative_base

如果我得到它的竅門,那麼,要傳遞一個構造函數,就需要定義一個函數,就像這樣。

def constructorFunc(self, email): 
    self.emailID = email 

然後,只是做Base = declarative_base(constructor = constructorFunc)

+0

嗯,我有類似的東西,然後在鄉親的'#sqlalchemy' @ chat.freenode.net說(我引述):> [方] AlecTaylor:有不需要創建一個明確的__init__ sqlalchemy爲你定義一個 –

+0

是的,'Base'類可以,但它只允許一個參數,如果你需要傳入兩個參數,你需要覆蓋'__init__'方法。 –

+1

它看起來像'declarative_base()'接受參數。看到鏈接 - [這裏](http://docs.sqlalchemy.org/en/rel_0_8/orm/extensions/declarative.html#sqlalchemy.ext.declarative.declarative_base) –