我有一个scrapy项目,并希望将检索到的数据保存在sqlite中。我在视图文件中写了抓取蜘蛛。你可以在下面看到它的一部分。
这是views.py文件:
class DivarSpider(scrapy.Spider):
name = "divar"
def parse_first_page(self, response):
.
.
yield scrapy.Request(url=url, method='GET', callback=self.parse_each_ads)
def parse_each_ads(self, response):
.
.
.
src = Source()
src.name = self.name
ctlg = Catalogue()
ctlg.city = city
ctlg.price = price
ctlg.datetime = date
ctlg.source = self.name
ctlg.source_token = token
src.save()
ctlg.save()这是models.py文件:
class Source(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Catalogue(models.Model):
source = models.ForeignKey(Source, null=False, on_delete=models.CASCADE)
city = models.CharField(max_length=100)
price = models.CharField(max_length=100)
datetime = models.CharField(max_length=100)
source_token = models.CharField(max_length=100)为什么src.save()和ctlg.save()不起作用?
发布于 2021-03-01 16:41:42
我也有同样的问题,你必须引用一个模型,保存它,然后引用另一个模型。您的代码可以像这样更好:
src = Source.objects.create(name=self.name)
ctlg = Catalogue(city=city, price=price, datetime=date, source=self.name,
source_token=token)若要在单个步骤中创建和保存对象,请使用create()方法。https://docs.djangoproject.com/en/stable/topics/db/queries/#creating-objects
对于Catalogue的源属性,您应该传递模型引用,而不是模型名称:
..., source = src, ...发布于 2021-03-01 15:14:54
在创建实例和保存实例时,您可以使用以下代码片段:
src = Source(name=self.name)
src.save()目录模型也是如此。对于外键,需要在source字段中传入src的实例,这样就可以了。参考文献链接
https://stackoverflow.com/questions/66417915
复制相似问题