2013-03-24 104 views
0

我有點困惑SQLAlchemy以及如何查詢工作。比方說,我有一個表隊和另一個表遊戲。我設置了它,所以如果我做Team.games,它會調用團隊所玩的所有遊戲。爲什麼是這樣工作的:SQLAlchemy查詢 - Python

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對象成爲保存在每個條目中的所有數據的列表?

回答

0

很難讓我說出沒有團隊和遊戲的定義。顯然返回的對象是不同的。

團隊可能有一個屬性,它具有與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))