У меня аналогичная настройка для классической модели клиентов/заказов. В моем случае это данные SEC, где одна модель отображает тикеры в CIK (который является идентификатором SEC для объектов отчетности). CIK и тикер уникальны для каждой компании. В другой таблице содержится информация о отчетах; компания может иметь несколько отчетов (квартальные доходы, годовые ..). Я использую CIK в качестве внешнего ключа для связывания тикеров и отчетов.Фильтрация внешнего ключа SQLAlchemy с использованием поля, отличного от поля внешнего ключа
Цель состоит в том, чтобы фильтровать по тикер и получать все отчеты, связанные с компанией. Следующие Постулаты «работают» (как это, не возвращается никакой ошибки), но получают отчеты от всех компаний, а не только требуется один (например, отчеты 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)
Что я определение здесь не так? Является ли эта модель «много-к-одному» или «один-ко-многим»? Правильно ли установлена связь?