我確信這個問題有一個簡單的解決方案,但我無法找到或思考它。我有一個模型“條目”,它們應該是按順序排列的(例如條目 1 可能是博客文章的第一部分,條目 2 可能是第二部分,依此類推)
class Entry(db.Model):
__tablename__="entry"
id = db.Column(db.Integer, primary_key=True)
...
prev_entry_id = db.Column(db.Integer, db.ForeignKey('entry.id'))
next_entry_id = db.Column(db.Integer, db.ForeignKey('entry.id'))
prev_entry = db.relationship("Entry", backref='next', remote_side='entry.id', foreign_keys=[prev_entry_id]) #previous_entry object
next_entry = db.relationship("Entry", backref="previous", uselist=False, foreign_keys=[next_entry_id]) #next_entry object
這個想法是,如果你得到一個條目,比如 entry-56,你可以向前 (57) 和向后 (55) 導航,一步一步,一直通過,就好像它是一個指標一樣。
但是,我從 sqlalchemy 得到了大量錯誤:
Table has no attribute 'id'
如果我注釋掉“prev_entry”,我會得到:
sqlalchemy.exc.InvalidRequestError: One or more mappers failed to initialize - can't proceed with initialization of other mappers. Triggering mapper: 'mapped class Entry->entry'. Original exception was: 'Table' object has no attribute 'id'
如果我注釋掉兩個“next_*entry”,我會得到:Table has no attribute 'id'
如果我注釋掉“next_entry”* 和“prev_entry”,它至少會加載。
簡而言之,有人知道在 Flask-SqlAlchemy 中設定它的正確方法嗎?
uj5u.com熱心網友回復:
發生“無屬性 id”錯誤是因為 SQLAlchemy 解釋'entry.id'為參考基礎Table物件,而不是模型。通過使用'Entry.id'(模型參考)或'entry.c.id'(表參考)來解決此問題。
此外,使用back_populates而不是backref配置反向關系:
prev_entry = db.relationship(
'Entry',
back_populates='next_entry',
remote_side='Entry.id',
foreign_keys=[prev_entry_id],
) # previous_entry object
next_entry = db.relationship(
'Entry',
back_populates='prev_entry',
uselist=False,
foreign_keys=[next_entry_id],
) # next_entry object
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/455173.html
標籤:烧瓶 sqlalchemy 烧瓶-sqlalchemy
