django save() 在 sqlite 中不起作用
django save() doesn't effect in sqlite
我有一个 scrapy 项目,想将检索到的数据保存在 sqlite 中。我在视图文件中写了 scrapy 蜘蛛。您可以在下面看到它的一部分。
这是 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()
不起作用?
要创建实例并保存它,您可以使用以下代码段:
src = Source(name=self.name)
src.save()
与目录模型类似。对于外键,您需要在源字段中传递 src 的实例,这将起作用。参考link
我有同样的问题,你必须引用一个模型,保存它,然后再引用另一个。
你的代码可以像这样更好:
src = Source.objects.create(name=self.name)
ctlg = Catalogue(city=city, price=price, datetime=date, source=self.name,
source_token=token)
To create and save an object in a single step, use the create()
method.
https://docs.djangoproject.com/en/stable/topics/db/queries/#creating-objects
对于目录的源属性,您应该传递模型引用,而不是模型名称:
..., source = src, ...
我有一个 scrapy 项目,想将检索到的数据保存在 sqlite 中。我在视图文件中写了 scrapy 蜘蛛。您可以在下面看到它的一部分。
这是 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()
不起作用?
要创建实例并保存它,您可以使用以下代码段:
src = Source(name=self.name)
src.save()
与目录模型类似。对于外键,您需要在源字段中传递 src 的实例,这将起作用。参考link
我有同样的问题,你必须引用一个模型,保存它,然后再引用另一个。 你的代码可以像这样更好:
src = Source.objects.create(name=self.name)
ctlg = Catalogue(city=city, price=price, datetime=date, source=self.name,
source_token=token)
To create and save an object in a single step, use the
create()
method. https://docs.djangoproject.com/en/stable/topics/db/queries/#creating-objects
对于目录的源属性,您应该传递模型引用,而不是模型名称:
..., source = src, ...