Я пытаюсь сохранить мои очищенные данные (productid, категория, имя, описание, цена и временная метка) в двух отдельных таблицах базы данных Microsoft SQL.Одна таблица с именем products_tb
дает productid
, category
, name
и description
.Оператор SQL, который хранит данные в этой соответствующей базе данных, также создает productgroupid
.productgroupid
должен использоваться для хранения оставшихся данных, price
и timestamp
во второй таблице с именем pricefluctuation
.Идея заключается в том, что у меня есть одна таблица со всеми уникальными продуктами и одна таблица, которая дает ежедневное обновление всех цен + временную метку всех этих продуктов.Затем все цены и временные метки можно сгруппировать, используя productgroupid
.
. Я попытался создать второй оператор SQL, но не знаю, как мне создать переменную из SELECT
, чтобы я мог использоватьрезультат для вставки в другую таблицу.
pipelines.py
import pymssql
class KrcPipeline(object):
def __init__(self):
self.conn = pymssql.connect(host='DESKTOP-P1TF28R', user='sa', password='123', database='kaercher')
self.cursor = self.conn.cursor()
def process_item(self, item, spider):
# This part works
sql_statement = f'''
BEGIN
IF NOT EXISTS (SELECT * FROM [kaercher].[dbo].[products_tb]
WHERE productid = {item['productid']})
BEGIN
INSERT INTO [kaercher].[dbo].[products_tb] (productid, category, name, description)
OUTPUT (Inserted.productgroupid)
VALUES ({item['productid']}, '{item['category']}', '{item['name']}', '{item['description']}')
END
END
'''
# This part doesn't work :(
sql_statement2 = f'''
SELECT productgroupid FROM [kaercher].[dbo].[products_tb]
WHERE productid = {item['productid']}
INSERT INTO [kaercher].[dbo].[pricefluctuation_tb] (productgroupid, price, timestamp)
VALUES ( variable for the productgroupid? , {item['price']}, {item['timestamp']})
'''
self.cursor.execute(sql_statement)
self.cursor.execute(sql_statement2)
self.conn.commit()
return item
items.py
import scrapy
class KrcItem(scrapy.Item):
productid=scrapy.Field()
name=scrapy.Field()
description=scrapy.Field()
price=scrapy.Field()
producttype=scrapy.Field()
timestamp=scrapy.Field()
category=scrapy.Field()
pass
Структура базы данных в MSSQL:
kaercher.db
products_tb
- productgroupid (bigint)
- productid (int)
- категория (nvarchar (100))
- name (nvarchar (350))
- описание (nvarchar (1000))
pricefluctuation_tb
- productgroupid (bigint)
- цена (с плавающей точкой)
- отметка времени (int)