0

我有一个与客户列表/订单“经典”模型类似的设置。在我的例子中,它是 SEC 数据,其中一个模型将代码映射到 CIK(这是 SEC 的报告实体的 id #)。每个公司的 CIK 和股票代码都是独一无二的。另一个表格包含有关报告的信息;一家公司可以有多个报告(季度收益、年度……)。我使用 CIK 作为绑定代码和报告的外键。

目标是按股票代码过滤并获取与公司相关的所有报告。以下语句“有效”(原样,不返回错误),但检索所有公司的报告,而不仅仅是所需的报告(例如,雅虎的报告):

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) 

我在这里定义错了什么?这个模型是多对一还是一对多?关系设置是否正确?

4

1 回答 1

0

您需要加入关系才能使查询起作用:

session.query(SEC_RSS_Model).join(SEC_RSSL_Model.CIK_Table).filter(CIK_Model.ticker == 'YHOO')
于 2013-09-20T09:48:36.163 回答