我对SQLAlchemy和查询是如何工作的有点困惑。假设我有一个table Team和另一个table Games。我安排好了,如果我做了,团队。它将调出该队参加过的所有比赛。为什么这是有效的:
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对象成为保存在每个条目中的所有数据的列表?
如果没有团队和游戏的定义,我很难判断。显然返回的对象是不同的。
很可能Team有一个table属性,它与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))