Could not determine join condition with many-to-many join Sqlalchemy
我在SQLAlchemy中收到以下错误:
Could not determine join condition between parent/child tables on
relationship Membership.user - there are no foreign keys linking these
tables. Ensure that referencing columns are associated with a
ForeignKey or ForeignKeyConstraint, or specify a 'primaryjoin'
expression.
我正在尝试在用户表和事件表之间创建多对多关系。 目的是将用户添加为事件的"成员"。 该事件也由一个用户"拥有",但这是一对多的关系。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | class Membership(db.Model): __tablename__ = 'event_membership' id = db.Column(db.Integer, primary_key = True, unique=True) user_id = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True), event_id = db.Column(db.Integer, db.ForeignKey('event.id'), primary_key=True), time_created = db.Column(db.DateTime,nullable = False, default = func.now()) user = db.relationship("Event",back_populates="memberships",foreign_keys=[]) event = db.relationship("User",back_populates="members") class User(db.Model,UserMixin): __tablename__ = 'user' id = db.Column(db.Integer(),primary_key =True) firstname = db.Column(db.String(50)) lastname = db.Column(db.String(50)) password = db.Column(db.String(255)) username = db.Column(db.String(50), index = True) email = db.Column(db.String(255), index = True) create_date = db.Column(db.DateTime()) questions = db.relationship('Question',backref='user',lazy='dynamic') events = db.relationship('Event',backref='owner',lazy='dynamic') admin = db.Column(db.Boolean,nullable=False,default=False) #moderating_events = db.Column(db.Integer(),db.ForeignKey('event.id')) authenticated = db.Column(db.Boolean,nullable=False,default=False) lastseen = db.Column(db.DateTime) validated = db.Column(db.Boolean,nullable=False,default=False) memberships = db.relationship("Membership", back_populates="user" ) class Event(db.Model): __tablename__ = 'event' id = db.Column(db.Integer(),primary_key = True) name = db.Column(db.String(255)) event_code = db.Column(db.String(30)) description = db.Column(db.Text()) owner_id = db.Column(db.Integer(),db.ForeignKey('user.id')) #owner = db.relationship("User",back_populates="events") questions = db.relationship('Question',backref='event',lazy='dynamic') create_date = db.Column(db.DateTime()) active_date = db.Column(db.DateTime()) active = db.Column(db.Boolean()) meeting_time = db.Column(db.DateTime()) #moderators = db.relationship('User', backref='event_moderator',lazy='dynamic') moderate_questions = db.Column(db.Boolean,nullable=False,default=True) allow_anonymous = db.Column(db.Boolean,nullable=False,default=True) members = db.relationship("Membership", back_populates="event") |
这个错误对我来说并不新鲜! 我在2个月前面对这个问题,并且以这种方式解决了很多对很多关系
您将必须编辑关联表"成员资格"。
然后您可以将其作为用户关系的辅助参数传递
试试这个代码:
1 2 3 4 | Membership =db.Table( 'Membership', db.Column('User_id',db.Integer,db.ForeignKey('User.id')), db.Column('Event_id', db.Integer, db.ForeignKey('Event.id')), |
并在"用户表"表中添加:
1 2 | Events = relationship("Event", secondary=Membership) |
在SqlALchemy的官方文档中找到更多信息