python - django save() 在 sqlite 中不起作用
问题描述
我有一个scrapy项目,想将检索到的数据保存在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()
这是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.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, ...
推荐阅读
- instagram-api - GRAPH API INSTAGRAM - 获取范围日期中的指标值
- opengl - 如何使用鼠标拖动事件 OpenGL(带透视投影)添加场景平移?
- ios - 锁定 iOS 设备时与 chromecast 断开连接
- selenium - 我在 selenium 中执行多个类,但无法在另一个类中找到驱动程序
- c# - 在应用程序内部和通过外部应用程序调用 api 返回不同的结果
- c# - 实体框架嵌套查询 Select() 问题
- openstack - 如何登录部署在 Openstack 基础架构上的 ubuntu-cloud 实例
- sql - 如何从 Oracle LISTAGG 聚合查询的结果中消除重复值
- windows - CIS中“No One”的定义是什么,Windows系统的SID选择
- python - Tkinter + matplot 动画填充内存