如何按另一个表(多个表)的顺序在MySQL表中保存管道中的Scrapy项目?

时间:2019-07-29 14:50:49

标签: mysql python-3.x database scrapy web-crawler

这是我有史以来第一个关于Stackoverflow的问题。 :P一切正常,除了抓取顺序外,我添加了优先级方法,但工作不正常。首先需要写所有作者数据,然后写所有专辑和歌曲数据并按此顺序存储到数据库。我想按顺序查询另一个项目中MySql表中的项目。

数据库结构:https://i.postimg.cc/GhF4w32x/db.jpg

示例:首先将所有作者项写入Author表中,然后通过Author表中的authorId对Album表中的相册项进行排序。

Github存储库:https://github.com/markostalma/discogs/tree/master/discogs

P.S。我有一个针对作者,专辑和歌曲解析器的三项类。

我还尝试了另一种方式,将所有蜘蛛放到一个物品类别中,但是没有成功。顺序是一样的。 :(

对不起,我的英语不好。

1 个答案:

答案 0 :(得分:1)

您需要为此设置项目管道。我建议使用SQL Alchemy构建SQL项并连接到数据库。您的SQL Alchemy类将反映您数据库模式中所有的表关系。让我给你演示。这是一个类似管道的工作示例,除了您可以在SQLAlchemy上设置类以容纳所需的m2m或外键关系。您必须参考他们的documentation [1]。

执行此操作的另一种Python方法是保持SQL Alchemy类和项目名称相同,并在item.items()中对k,v做类似的操作: 这样,您就可以循环播放项目并设置其中的内容。代码很长,但是出于某种目的违反了DRY。

callback