努力想出SQLAlchemy模型关系



SQL新手,听我说。

我试图从不同的新闻网站的标题存储数据。试图找出正确的数据库结构和SQLAlchemy模型,但现在似乎我很难掌握如何创建适当的关系。

现在我已经结束了以下models.py文件:

class Headline(Base):
__tablename__ = 'headlines'
id = Column(Integer, primary_key=True, index=True)
headline = Column(DateTime)
time_stamp = Column(String)

class NewYorkTimes(Base):
__tablename__ = 'newyorktimes'
id = Column(Integer, primary_key=True)
headline_id = Column(ForeignKey(Headline.id))
headlines = relationship(
'Headline',
primaryjoin="and_(NewYorkTimes.headline_id==Headline.id)"
)

class Times(Base):
__tablename__ = 'times'
id = Column(Integer, primary_key=True)
headline_id = Column(ForeignKey(Headline.id))
headlines = relationship(
'Headline',
primaryjoin="and_(Times.headline_id==Headline.id)"
)

我真的不确定这种关系是否正确…我希望将所有标题存储在headlines表中,带有时间戳和文本内容,并且在添加新标题的同时,我想指定它是从哪个站点收集的,因此将this标题id添加到站点特定的表中。

我曾经将数据存储在特定于站点的表中,但我认为这只是一个完全错误的解决方案-例如,表Times与列id,headline,time_stamp和其他站点的表具有完全相同的结构,但是为此创建SQLAlchemy模型可能否认了DRY的所有内容。

我认为您可以尝试一种不同的方法,其中您有一个表(Publications)为您的所有新闻来源,而不是每个来源一个单独的表。在这种方法中,Times,NewYorkTimes和其他任何您拥有的都将是Publications表中的条目。

还有,你似乎把上面标题和时间戳列的列类型搞混了。

class Headline(Base):
__tablename__ = 'headlines'
id = Column(Integer, primary_key=True, index=True)
headline = Column(String)
time_stamp = Column(Datetime)
publication_id = Column(Integer, ForeignKey('publications.id'))
class Publication(Base):
__tablename__ = 'publications'

id = Column(Integer, primary_key=True)
name = Column(String)
headlines = relationship('Headline', backref="publication")

headlines表上使用backref将自动在Headline表上添加一个名为publication的关系。参见sqlalchemy文档中的一对多关系和backref。

相关内容

  • 没有找到相关文章

最新更新