在SQLAlchemy的文檔,http://docs.sqlalchemy.org/en/rel_0_9/orm/relationships.html一切都應該工作正常,但我會得到一個名爲錯誤瓶SQLAlchemy的許多一對多的關係,需要secondaryjoin和primaryjoin出於某種原因
原始的例外是:無法確定母公司之間的連接條件/關係User.rank_r上的子表。指定一個'primaryjoin'表達式。如果存在「次要」,則還需要「次要連接」。
class User(db.Model, UserMixin):
__tablename__ = 'users'
rank_r = db.relationship('Rank',
secondary=ranks,
backref=db.backref('users', lazy='dynamic'))
class Rank(db.Model):
__tablename__ = 'rank'
id = Column(db.Integer, primary_key=True)
name = Column(db.String(STRING_LEN), nullable=False, unique=True)
ranks = db.Table('ranks',
db.Column('rank_id', db.Integer, db.ForeignKey('rank.id')),
db.Column('user_id', db.Integer, db.ForeignKey('users.id'))
)
基本上我想這樣做:
SELECT u.id, u.name, r.name users u INNER JOIN ranks r ON r.id=rr.rank_id INNER JOIN rank rr ON rr.user_id==u.id
這將返回類似:
1 Bob Major
2 Joey Captain
3 Adam Brigadier General
這種關係的代碼也似乎失敗:
rank_r = db.relationship('Rank',
primaryjoin="(rank.c.id==ranks.c.rank_id)",
secondary="ranks",
secondaryjoin="(id==ranks.c.user_id)",
backref=db.backref('users', lazy='dynamic'))
錯誤:
StatementError:在映射器映射器|用戶|用戶...上沒有配置列rank.id(原因:UnmappedColumnError:映射器映射器|用戶|用戶...上沒有配置列rank.id)'SELECT rank .id AS rank_id,rank.name AS rank_name \ nFROM等級,等級,用戶\ nWHERE? = ranks.rank_id AND users.id = ranks.user_id'[immutabledict({})]
這是當我嘗試在模板中調用「User.rank_r」時顯示的內容。
- 你確定你需要一個多對多的表,而不僅僅是一對多的模式嗎? – Doobeh 2014-11-21 21:56:47
我在想你是對的,隊長不可能是主力。另一方面,我正在考慮一個可能有更多模塊/區域的系統,這意味着您可以在一個模塊中擔任上尉,並且在另一個模塊中擔任主要職位。 – Dexter 2014-12-09 19:35:39