Чего не хватает в модели TaggedBlogRecord для наследования в sqlalchemy для его работы? - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь изменить пример pyramid_blogr .Единственный ближайший поток QA - это этот и ссылка , упомянутая в этом потоке.Я прошел через них обоих.Я использую конкретное наследование, под которым я понимаю, что для каждой модели будут созданы отдельные таблицы.Тем не менее, когда я запрашиваю записи из второй модели, я получаю сообщения о том, что в модели есть столбцы, такие как title или созданные в TaggedBlogRecord.

Ошибки

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such column: ====> entries.created  <======
[SQL: SELECT entrieslanguage.id AS entrieslanguage_id 
FROM entrieslanguage ORDER BY entries.created DESC
 LIMIT ? OFFSET ?]

Пример кода следующий

class BlogRecord(Base):
    __tablename__ = 'entries'
    id = Column(Integer, primary_key=True)
    title = Column(Unicode(255), unique=True, nullable=False)
    body = Column(UnicodeText, default=u'')
    created = Column(DateTime, default=datetime.datetime.utcnow)
    edited = Column(DateTime, default=datetime.datetime.utcnow)


class TaggedBlogRecord(BlogRecord):
    __tablename__ = 'taggedentries'
    __mapper_args__ = {'concrete':True}
    id = Column(Integer, primary_key=True)
    tags = Column(Unicode(255))

1 Ответ

1 голос
/ 12 марта 2019

Читать https://docs.sqlalchemy.org/en/latest/orm/inheritance.html#concrete-table-inheritance более внимательно (выделено):

Следует отметить две критические точки:

Мы должны явно определить все столбцы в каждом подклассе, даже столбцы то же имя. Столбец, такой как Employee.name, здесь не копируется к таблицам, отображаемым для нас менеджером или инженером.

пока Инженер и классы менеджера отображаются в отношениях наследования с Сотрудник, они все еще не включают полиморфную нагрузку. Смысл, если мы запрашиваем объекты Employee, таблицы менеджера и инженера не вообще запрошено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...