顧客リスト/注文の「クラシック」モデルと同様の設定があります。私の場合は、1 つのモデルがティッカーを CIK (レポート エンティティの SEC の ID #) にマップする SEC データです。CIK とティッカーは、各企業に固有のものです。別のテーブルには、レポートに関する情報が保持されます。企業は複数のレポート (四半期ごとの収益、年次など) を持つことができます。ティッカーとレポートを結び付けるための外部キーとして CIK を使用しています。
目標は、ティッカーでフィルタリングして、会社に関連するすべてのレポートを取得することです。次のステートメントは「機能します」(そのままで、エラーは返されません) が、必要な会社 (yahoo のレポートなど) だけでなく、すべての会社からレポートを取得します。
for instance in session.query(SEC_RSS_Model).filter(CIK_Model.ticker == 'YHOO'):
print instance.edgarlink
上記のステートメントは、SEC_RSS ( SEC_RSS_Modelに関連付けられたテーブル) の内容全体を出力します。つまり、フィルタリングはまったく行われません。
私の SQLAlchemy モデル:
class CIK_Model(Base):
__tablename__ = 'CIK_Table'
id = Column(Integer, primary_key=True)
CIK = Column(String(10), unique=True)
ticker = Column(String(8))
RSS = relationship("SEC_RSS_Model", backref="CIK_Table")
def __init__(self, CIK, ticker):
self.CIK = CIK
self.ticker = ticker
def __repr__(self):
return "<CIK_Table('%s','%s')>" % (self.CIK, self.ticker)
と
class SEC_RSS_Model(Base):
__tablename__ = 'SEC_RSS'
id = Column(Integer, primary_key=True)
CIK = Column(String(10),ForeignKey ( "CIK_Table.CIK" ))
edgarlink = Column(String(128), unique=True)
def __init__(self, CIK, edgarlink):
self.CIK = CIK
self.edgarlink = edgarlink
def __repr__(self):
return "<SEC_RSS('%s','%s')>" % (self.CIK, self.edgarlink)
ここで何が間違っていると定義していますか? このモデルは多対 1 ですか、それとも 1 対多ですか? 関係は適切に設定されていますか?