Scrapy / Python / MySQL: Каков наилучший подход для сохранения дополнительной информации об элементе в отдельной таблице? - PullRequest
0 голосов
/ 20 ноября 2018

Я сканирую веб-сайт со Scrapy, содержащий какой-то listings, и сохраняю новые списки в таблице MySQL.Для каждого listing я хочу добавить price в отдельную таблицу (когда она меняется).

Мой текущий подход

Таблица listings:

<id> | guid | title | body | created_at
-------------------------------------

Таблица listing_prices:

<id> | listing_id | price | created_at
------------------------------------

Использование конвейера AddListingsToDatabase() для сохранения новых списков и последующее использование конвейера AddPricesToDatabase() для сохранения новых / обновленных цен в базе данных.

В AddPricesToDatabase() я запрашиваю базу данных, чтобы получить все списки с ценами.Затем я проверяю, изменилась ли цена, и добавляю / обновляю цену.Для этого мне нужно listing.id.

Пока что это работает только для списков, которые уже были в базе данных до текущего сканирования.

Моя проблема

Когда я хочучтобы добавить новые цены в базу данных, мне нужно listing.id (auto_increment) из базы данных.Когда я запрашиваю базу данных в конвейере AddPricesToDatabase(), она еще не находит списки, добавленные конвейером AddListingsToDatabase().

Мои вопросы

Каков наилучший подход для сохранения дополнительной информации для соскоба Item в отдельной таблице?

1 Ответ

0 голосов
/ 20 ноября 2018

Как упоминалось в комментариях, вместо автоматического увеличения вашего идентификатора вы можете создать комбинированный идентификатор, такой как website_id + listing_id, который бы однозначно идентифицировал вашу запись.

Вы можете сохранить этов одном столбце или в двух отдельных столбцах и создайте объединенный ключ.

Например:

websites таблица:

<id> | website_url
------------------

listings таблица:

<id> | website_id | guid | title | body | created_at
----------------------------------------------------

listing_prices таблица:

<id> | website_id | listing_id | price | created_at
---------------------------------------------------

В таблице listings необходимо убедиться, что комбинация id и website_id уникальна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...