【发布时间】:2015-01-20 03:53:38
【问题描述】:
在 SQLAlchemy 文档中,http://docs.sqlalchemy.org/en/rel_0_9/orm/relationships.html 一切正常,但我收到一个名为
的错误最初的例外是:无法确定关系 User.rank_r 上的父/子表之间的连接条件。指定一个“primaryjoin”表达式。如果存在“secondary”,则还需要“secondaryjoin”。
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: No column rank.id is configured on mapper Mapper|User|users...(原始原因:UnmappedColumnError: No column rank.id is configured on mapper|User|users...)'SELECT rank. id AS rank_id, rank.name AS rank_name \nFROM rank, rank, users \nWHERE ? = ranks.rank_id AND users.id = ranks.user_id' [immutabledict({})]
这是我尝试在模板中调用“User.rank_r”时显示的内容。
【问题讨论】:
-
一个人拥有多个等级并不常见——您确定需要多对多表,而不仅仅是一对多模式吗?
-
我在想你是对的,船长不可能是少校。另一方面,我在考虑一个可能有更多模块/区域的系统,这意味着在某种程度上,你可以成为一个模块的队长,并在另一个模块中主修。
标签: flask sqlalchemy flask-sqlalchemy