我有一个与客户列表/订单“经典”模型类似的设置。在我的例子中,它是 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)
我在这里定义错了什么?这个模型是多对一还是一对多?关系设置是否正确?