我在这里使用SQLAlchemy,试图制作几个表并将它们链接起来,但在实现此功能时遇到了问题。
class Team(Base):
__tablename__ = "teams"
id = Column(Integer, primary_key=True)
espn_team_id = Column(Integer, unique=True, nullable=False)
games = relationship("Game", order_by="Game.date")
def __init__(self, name):
self.name = name
self.espn_team_id = espn_team_id
self.games = games
class Game(Base):
__tablename__ = "games"
id = Column(Integer, primary_key=True)
espn_game_id=Column(Integer, unique=True, nullable=False)
date = Column(Date)
h_espn_id = Column(Integer, ForeignKey('teams.espn_team_id'))
a_espn_id = Column(Integer, ForeignKey('teams.espn_team_id'))
我将其放在一个用于创建表的文件中。然后在另一个文件中,我使用insert()函数将值放入两个表中。我想如果我有一个拥有espn_team_id 360的团队,然后将多个游戏放入具有h_espn_id = 360或a_espn_id = 360的游戏表中,我应该能够做到:
a = Table("teams", metadata, autoload=True)
a = session.query(a).filter(a.c.espn_team_id==360).first().games
并且应该列出所有ID 360的游戏团队。但是相反我得到了这个错误
AttributeError:'NamedTuple'对象没有属性'games'
我对这里的SQLAlchemy或关系数据库有什么误解?
最佳答案
首先,您不必创建另一个Table
对象,因为它可以作为Team.__table__
使用。无论如何,您可以只查询映射的类,例如
query = Session.query(Team).filter(Team.espn_team_id == 360)
team360 = query.one()
games = team360.games
有关方法
.one()
,.first()
和.all()
的信息,请参阅文档:http://docs.sqlalchemy.org/en/latest/orm/query.html关于python - SQLAlchemy使用Relationship(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15237953/