我对客户列表/订单'经典'模型有类似的设置。在我的情况下,它是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)
我在这里定义错了什么?这种模式是多对一还是一对多?关系设置正确吗?
答案 0 :(得分:0)
您需要加入关系才能使查询正常工作:
session.query(SEC_RSS_Model).join(SEC_RSSL_Model.CIK_Table).filter(CIK_Model.ticker == 'YHOO')