Tôi có hai bảng, News
và Files
:SQLAlchemy phụ thuộc vòng tròn - làm thế nào để giải quyết nó?
# unrelated columns removed
class News(db.Model):
id = db.Column(db.Integer, primary_key=True)
file_id_logo = db.Column(db.Integer, db.ForeignKey('files.id'))
logo = db.relationship('File', lazy=False)
class File(db.Model):
id = db.Column(db.Integer, primary_key=True)
news_id = db.Column(db.Integer, db.ForeignKey('news.id'))
news = db.relationship('News', lazy=False, backref=db.backref('files'))
Sau khi thêm file_id_logo
fkey, SQLAlchemy nêu ra một CircularDependencyError. Tôi đã thử post_update=True
trong mối quan hệ logo
, nhưng nó không thay đổi bất cứ điều gì.
Cách thích hợp để giải quyết vấn đề này là gì?
Các trường hợp sau đây có thể xảy ra (trong trường hợp nó vấn đề):
- một tệp không có hoặc đúng một Tin tức được giao.
- Nếu Tệp không có Tin tức, cũng không có Tin tức nào có tệp này được tham chiếu làm biểu trưng của nó.
- Có thể có nhiều Tệp cho một Tin tức, nhưng chỉ một trong các Tệp này có thể là
logo
. - Vì vậy, nếu một Tin tức có số
logo
, Tệp được tham chiếu cũng có tin này lànews
.
Đã làm việc tốt để loại bỏ lỗi, nhưng nó đã phá vỡ một số mối quan hệ khác. Vì vậy, tôi quyết định chỉ đơn giản là loại bỏ ForeignKey. Chấp nhận nó anyway vì câu trả lời chính nó là chính xác. – ThiefMaster
@ThiefMaster Bạn có lẽ chỉ cần thiết lập primaryjoin về quan hệ của bạn - chúng không thể xác định hướng nối khi có nhiều quan hệ/backrefs giữa hai bảng. – letitbee
Tôi đã tìm thấy thông tin tại đây: http://docs.sqlalchemy.org/en/rel_0_8/core/constraints.html –