Python django save()不';sqlite中的t效应

Python django save()不';sqlite中的t效应,python,django,scrapy,Python,Django,Scrapy,我有一个粗略的项目,希望将检索到的数据保存在sqlite中。我在视图文件中编写scrapy spider。你可以在下面看到它的一部分 这是views.py文件: class DivarSpider(scrapy.Spider): name = "divar" def parse_first_page(self, response): . . yield scrapy.Request(url=url, meth

我有一个粗略的项目,希望将检索到的数据保存在sqlite中。我在视图文件中编写scrapy spider。你可以在下面看到它的一部分

这是
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()
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)
这是
models.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()
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的实例,这将起作用。参考

我也有同样的问题,你必须参考一个模型,保存它,然后再参考另一个。 您的代码可以更好地如下所示:

    src = Source.objects.create(name=self.name)
    ctlg = Catalogue(city=city, price=price, datetime=date, source=self.name, 
                     source_token=token)
要在单个步骤中创建和保存对象,请使用
create()
方法。

对于目录的源属性,应传递模型参考,而不是模型名称:

..., source = src, ...

你确定每个广告都被称为
parse\u吗?@klauds。是的,我肯定我很肯定不是,因为这会导致一些数据库约束错误。@klauds。我相信是的。。。由于终端中的日志,您设置的
ctlg.source=self.name
不知道如何工作
ctlg.source
应该是源代码的外键。您需要先保存源代码,然后保存
ctlg.source=src
,然后再保存
ctlg
。它不工作。它是否显示任何错误?您是否可以尝试仅保存源实例以检查实际问题?是的,我尝试仅保存源实例,但仍然不起作用。。。。有两个错误,但与此问题无关错误1:
builtins.TypeError:\u findCaller()接受1到2个位置参数,但给出了3个位置参数
error 2:
handler=\u signal.signal(\u enum\u to_int(signalnum),\u enum\u to_int(handler))builtins.ValueError:signal仅在主线程中工作