6
我有一個類似於下面的類結構。 sqlalchemy用db.create_all創建的表看起來不錯。作業添加了填寫的適當欄(教師的school_id,警察的precinct_id)。我試圖調用do_stuff()時出現問題:繼承Flask/SqlAlchemy
p = Teacher(...)
p.do_stuff()
返回「hey im the parent」,這是Job的返回值。所以,即使所有東西都被正確地插入數據庫,看起來好像沒有發生實際的繼承,但是唯一的就是Job模型。有沒有辦法解決這個問題,或者我應該以另一種方式進行設置?
class Job(db.Model):
id = Column(Integer, primary_key=True)
...
def __init__(...):
...
def do_stuff(self):
print 'hey im the parent'
class Teacher(Job):
school_id = Column(Integer, ForeignKey('school.id'))
def __init__(...):
super(Teacher, self).__init__(...)
self.school_id = school_id
def do_stuff(self):
print 'teacher here'
class Policeman(Job):
precinct_id = Column(Integer, ForeignKey'precinct.id'))
def __init__(...):
super(Policeman, self).__init__(...)
self.precinct_id = precinct_id
def do_stuff(self):
print 'police ack'
我無法複製您的問題,但可能它的值得關注sqlalchemy中的繼承:http://docs.sqlalchemy.org/en/rel_0_8/orm/inheritance。 html#joined-table-inheritance – Teisman
使用你顯示的代碼,代碼應該工作。請確認您的實際代碼與您在此放置的樣本有多大差異。 – van
由於你的問題是作爲「作業」響應的任何事情,我認爲你使用單表繼承,你錯過了SQLA文檔中所述的「類型」列。即使您可以填寫表中存在的school_id/precinct_id文件,那些SQLA也會始終讀取作業。 你的代碼不完整,你應該使用'__mapper_args__'和'__tablename__'。 – TonyMoutaux