Mam strukturę klasową, która wygląda podobnie do poniższej. Tabela, którą sqlalchemy tworzy za pomocą db.create_all, wygląda dobrze. Zadania są dodawane z odpowiednimi wypełnionymi kolumnami (school_id for Teachers, posterunek dla Policeman). Mój problem pojawia się podczas próby wywołania do_stuff():Dziedziczenie w kolbie/SqlAlchemy
p = Teacher(...)
p.do_stuff()
zwraca "hej im rodzic", który jest wartością zwracaną przez Job. Tak więc, mimo że wszystko jest wstawiane do DB poprawnie, wydaje się, że rzeczywiste dziedziczenie nie występuje, ale raczej jedynym Modelem, który jest na miejscu, jest model Pracy. Czy istnieje sposób, aby to naprawić, czy powinienem ustawić to w inny sposób?
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'
Nie mogłem odtworzyć twojego problemu, ale być może warto zajrzeć do dziedziczenia w sqlalchemy: http://docs.sqlalchemy.org/en/rel_0_8/orm/inheritance. html # join-table-dziedziczenie – Teisman
Używając pokazanego kodu, kod powinien zadziałać. Sprawdź, ile rzeczywisty kod różni się od próbki, którą tu wstawiłeś. – van
Jako że twoim problemem jest cokolwiek odpowiadającego jako "Praca", myślę, że używasz dziedziczenia z pojedynczej tabeli i tęsknisz za kolumną "typ", jak podano w dokumencie SQLA. Te SQLA zawsze pobierają zadanie, nawet jeśli możesz wypełnić wpisy school_id/precinct_id, które są obecne w tabeli. Twój kod nie jest kompletny i powinieneś użyć '__mapper_args__' i' __tablename__', których używasz. – TonyMoutaux