Tôi có cấu trúc lớp trông giống như dưới đây. Bảng mà sqlalchemy tạo ra với db.create_all có vẻ tốt. Công việc được thêm vào với các cột thích hợp được điền đầy đủ (school_id for Teachers, precinct_id for Policemen). Vấn đề của tôi xuất hiện khi cố gắng gọi do_stuff():Thừa kế trong Flask/SqlAlchemy
p = Teacher(...)
p.do_stuff()
trả về "hey im the parent", là giá trị trả về của công việc. Vì vậy, mặc dù tất cả mọi thứ đang được đưa vào DB đúng cách, nó có vẻ như thừa kế thực tế không xảy ra mà là mô hình duy nhất được đặt ra là một mô hình công việc. Có cách nào để sửa lỗi này hay tôi nên thiết lập điều này theo cách khác?
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'
Tôi không thể sao chép vấn đề của bạn, nhưng có lẽ giá trị của nó nhìn vào kế thừa trong sqlalchemy: http://docs.sqlalchemy.org/en/rel_0_8/orm/inheritance. html # join-table-inheritance – Teisman
Sử dụng mã bạn hiển thị, mã sẽ hoạt động. Vui lòng xác minh số lượng mã thực tế của bạn khác với mẫu bạn đặt ở đây. – van
Vì vấn đề của bạn là bất cứ điều gì đáp ứng như là một "công việc", tôi nghĩ rằng bạn sử dụng kế thừa bảng duy nhất và bạn bỏ lỡ một cột "loại" như đã nêu trong tài liệu SQLA. Các SQLA đó luôn tìm nạp một công việc, ngay cả khi bạn có thể điền đầy đủ các tệp tin school_id/precinct_id có trong bảng. Mã của bạn chưa hoàn thành và bạn nên sử dụng '__mapper_args__' và' __tablename__'. – TonyMoutaux