【发布时间】:2019-09-24 22:03:19
【问题描述】:
我正在尝试将我抓取的数据(产品 ID、类别、名称、描述、价格和时间戳)存储在 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))
- 名称(nvarchar(350))
- 描述(nvarchar(1000))
-
pricefluctuation_tb
- productgroupid (bigint)
- 价格(浮动)
- 时间戳(int)
【问题讨论】:
标签: sql sql-server scrapy pymssql