Python SQLAlchemy中的关系未按预期工作

Python SQLAlchemy中的关系未按预期工作,python,sqlalchemy,Python,Sqlalchemy,我试图在两个表之间创建一个关系;活动和地点。 我试图实现的是建立一对多的关系。事件可以在某个位置给定,因此该位置必须能够容纳各种事件。我已经摆弄外键好几个小时了,我不知道如何让它工作 My location.py如下所示: from datetime import datetime from sqlalchemy import Column, Integer, ForeignKey, Float, Date, String from sqlalchemy.orm import relation

我试图在两个表之间创建一个关系;活动和地点。 我试图实现的是建立一对多的关系。事件可以在某个位置给定,因此该位置必须能够容纳各种事件。我已经摆弄外键好几个小时了,我不知道如何让它工作

My location.py如下所示:

from datetime import datetime

from sqlalchemy import Column, Integer, ForeignKey, Float, Date, String
from sqlalchemy.orm import relationship

from model import Base

class Location(Base):
    __tablename__ = 'location'
    id = Column(Integer, primary_key=True, nullable=False)
    title = Column(String, unique=True)
    description = Column(String, nullable=False)
    founder_id = Column(Integer, ForeignKey('users.id'))
    latitude = Column(Float)
    longtitude = Column(Float)
    creation_date = Column(Date, default=datetime.now)


    # Relationships
    creator = relationship('User', foreign_keys=founder_id)
    events = relationship('Event', back_populates='location')
from datetime import datetime

from sqlalchemy import Column, Integer, Date, Float, String, ForeignKey
from sqlalchemy.orm import relationship

from model import Base
from model.event_contestant import EventContestant
from model.location import Location


class Event(Base):
    __tablename__ = 'event'
    id = Column(Integer, primary_key=True)
    title = Column(String, nullable=False, unique=True)
    date = Column(Date, nullable=False)
    location_id = Column(Integer),
    longtitude = Column(Float, nullable=False)
    latitude = Column(Float, nullable=False)
    description = Column(String, nullable=False)
    difficulty = Column(Integer, nullable=False, default=3)
    creation_date = Column(Date, nullable=False, default=datetime.now)
    event_creator = Column(Integer, ForeignKey('users.id'), nullable=False)
    event_type = Column(String, nullable=False, default='Freestyle')

    # Relationships
    creator = relationship("User")
    contestants = relationship(EventContestant, back_populates="event")
    location = relationship('Location', foreign_key=location_id)
event.py如下所示:

from datetime import datetime

from sqlalchemy import Column, Integer, ForeignKey, Float, Date, String
from sqlalchemy.orm import relationship

from model import Base

class Location(Base):
    __tablename__ = 'location'
    id = Column(Integer, primary_key=True, nullable=False)
    title = Column(String, unique=True)
    description = Column(String, nullable=False)
    founder_id = Column(Integer, ForeignKey('users.id'))
    latitude = Column(Float)
    longtitude = Column(Float)
    creation_date = Column(Date, default=datetime.now)


    # Relationships
    creator = relationship('User', foreign_keys=founder_id)
    events = relationship('Event', back_populates='location')
from datetime import datetime

from sqlalchemy import Column, Integer, Date, Float, String, ForeignKey
from sqlalchemy.orm import relationship

from model import Base
from model.event_contestant import EventContestant
from model.location import Location


class Event(Base):
    __tablename__ = 'event'
    id = Column(Integer, primary_key=True)
    title = Column(String, nullable=False, unique=True)
    date = Column(Date, nullable=False)
    location_id = Column(Integer),
    longtitude = Column(Float, nullable=False)
    latitude = Column(Float, nullable=False)
    description = Column(String, nullable=False)
    difficulty = Column(Integer, nullable=False, default=3)
    creation_date = Column(Date, nullable=False, default=datetime.now)
    event_creator = Column(Integer, ForeignKey('users.id'), nullable=False)
    event_type = Column(String, nullable=False, default='Freestyle')

    # Relationships
    creator = relationship("User")
    contestants = relationship(EventContestant, back_populates="event")
    location = relationship('Location', foreign_key=location_id)
我从sqlalchemy获得的stactrace如下所示:

sqlalchemy.exc.InvalidRequestError: One or more mappers failed to initialize - can't proceed with initialization of other mappers. Triggering mapper: 'Mapper|Location|location'. Original exception was: Could not determine join condition between parent/child tables on relationship Location.events - there are no foreign keys linking these tables. Ensure that referencing columns are associated with a ForeignKey or ForeignKeyConstraint, or specify a 'primaryjoin' expression.

我真的很困惑,也不明白为什么这一对多就可以了。

事件
需要一个指向
位置的
外键来构建关系。具体来说,您需要更改
Event.location\u id
的定义,以添加
外键('location.id')
(并去掉尾随的逗号;
Event.location\u id
当前是一个元组)。

我尝试将location\u id设置为与location.id绑定的外键,但这不起作用。