我在这里使用SQLAlchemy,试图制作一对表并将它们链接起来,并且在实现时遇到问题。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”对象有没有属性“游戏”
什么我误解关于SQLAlchemy的或关系型数据库在这里?
sayap感谢为您的文章和你的第一点。第二点是我的错,现在我会编辑它,我包含.first(),它不起作用。关注: 打印session.query(一).filter(acespn_team_id == 360)。首先()游戏 回溯(最近通话最后一个): 文件 “”,1号线,在 AttributeError:'NamedTuple'对象没有'游戏'属性 –
appleLover
2013-03-06 21:37:45
,我尝试按照你的方式做: from table_def import team,game >>> print session.query(Team).filter(Team.espn_team_id == 360) .first()游戏 [大错误信息] sqlalchemy.exc.InvalidRequestError:一个或多个映射器未能初始化 - 无法继续初始化其他映射器。原始异常是:无法确定关系Team.games上的父/子表之间的连接条件。指定一个'primaryjoin'表达式。如果存在“次要”,则还需要“次要连接”。 – appleLover 2013-03-06 21:41:33
哦,你的类映射是不完整的,因为你在表之间有两个外键。我认为你需要有'Team.home_games'和'Team.away_games'。 – sayap 2013-03-06 21:46:33