0

我对 SQLAlchemy 以及查询的工作方式有点困惑。假设我有一个桌面团队和另一个桌面游戏。我设置了它,所以如果我做 Team.games,它会调出 Team 玩过的所有游戏。为什么这是有效的:

from table_definitions import Team, Games

blah blah
session.query(Team).first().games

这失败了:

teams_table = Table("teams", metadata, autoload=True)
session.query(teams_table).first().games

AttributeError: 'NamedTuple' object has no attribute 'Games'

??

我的第二个问题是在它返回的第一个查询中<table_def.Game object at 0x1b98090>——我怎样才能让这个 Game 对象成为每个条目中保存的所有数据的列表?

4

1 回答 1

0

如果没有团队和游戏的定义,我很难说。显然返回的对象是不同的。

Team 很可能有一个属性,该属性与teams_table 具有相同的属性。

这是一个摘录,显示了一个可能有帮助的多对多关系示例。

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Table, ForeignKey, Column, Integer, String, Float, Binary, DateTime, Boolean
from sqlalchemy.orm import relationship

Base = declarative_base()

market_target = Table(
    'market_target', Base.metadata,
    Column('market_id', Integer, ForeignKey('market.id'), primary_key=True ),
    Column('target_id', Integer, ForeignKey('target.id'), primary_key=True )
)

class Market(Base):

    __tablename__ = 'market'
    id = Column(Integer, primary_key=True)
    id_market = Column(String(50))
    market = Column(String(50))

    targets = relationship("Target", secondary=market_target, backref="markets")

class Target(Base):

    __tablename__ = 'target'
    id = Column(Integer, primary_key=True)
    id_target = Column(String(100))
    sort = Column(Integer)
    target = Column(String(200))
于 2013-03-25T07:58:24.163 回答