每次 运行 你的 django 代码时如何创建新的 postgreSQL 行来保存数据
How to create new postgreSQL rows to save data every time you run your django code
我现在有疑问,当我执行我的脚本时,我能否连续保存它
我的 models.py 有 2 个表(或 class)页面和类别
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=128, unique=True)
def __unicode__(self):
return self.name
class Page(models.Model):
category = models.ForeignKey(Category)
title = models.CharField(max_length=128)
url = models.URLField()
views = models.IntegerField(default=0)
price = models.IntegerField(default=0)
def __unicode__(self):
return self.title
这段代码是我的 views.py
的片段
Category.objects.all()
f = Category()
Page.objects.all()
p = Page()
p.category = f
x = India(symb)
f.name = x['Company Name']
f.save()
p.category = f
p.title = symb
p.price = float(x['Price'])
p.save()
当我再次或每次执行它时,它会覆盖同一行,这在我使用它的方式上很有意义。
我如何在每次 运行 我的脚本时创建新行,以便我可以将新数据保存在新行中而不是覆盖同一行
我想过使用 python 'random' 从列表中随机选择一个字母(例如 g),每次我 运行 脚本然后加入它以获得类似 'g.price' 但是这有 26 个字母的限制,随机但不是唯一的,所以可以生成相同的字母(尽管我可以对此进行 'if' 检查)。
有没有简单正确的方法来做到这一点?
我不确定为什么默认情况下不插入它们,但您可以强制 Django 这样做。
正如官方文档所建议的那样:
In some rare circumstances, it’s necessary to be able to force the save() method to perform an SQL INSERT and not fall back to doing an UPDATE. Or vice-versa: update, if possible, but not insert a new row. In these cases, you can pass the force_insert=True or force_update=True parameters to the save() method. Obviously, passing both parameters is an error: you cannot both insert and update at the same time!
https://docs.djangoproject.com/en/1.10/ref/models/instances/#forcing-an-insert-or-update
Models.py:-
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=128, unique=True)
def __unicode__(self):
return self.name
class Page(models.Model):
name = models.ForeignKey(Category)
title = models.CharField(max_length=128)
url = models.URLField()
views = models.IntegerField(default=0)
price = models.IntegerField(default=0)
def __unicode__(self):
views.py:-
如果您想更新特定类别的页面,请按照以下步骤操作:-
a = Category.objects.get(name=nameField) #Fetch reference object for which category name you want to add page
x = India(symb)
b = Page.objects.filter(name=a).update(title=symb,price = float(x['Price']))
如果你想添加新的类别和页面都按照这个:-
x = India(symb)
a = Category.objects.create(name = x['Company Name'])
b = Page.objects.create(name=a,title=symb,price = float(x['Price']))
b.save()
我现在有疑问,当我执行我的脚本时,我能否连续保存它
我的 models.py 有 2 个表(或 class)页面和类别
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=128, unique=True)
def __unicode__(self):
return self.name
class Page(models.Model):
category = models.ForeignKey(Category)
title = models.CharField(max_length=128)
url = models.URLField()
views = models.IntegerField(default=0)
price = models.IntegerField(default=0)
def __unicode__(self):
return self.title
这段代码是我的 views.py
的片段Category.objects.all()
f = Category()
Page.objects.all()
p = Page()
p.category = f
x = India(symb)
f.name = x['Company Name']
f.save()
p.category = f
p.title = symb
p.price = float(x['Price'])
p.save()
当我再次或每次执行它时,它会覆盖同一行,这在我使用它的方式上很有意义。
我如何在每次 运行 我的脚本时创建新行,以便我可以将新数据保存在新行中而不是覆盖同一行
我想过使用 python 'random' 从列表中随机选择一个字母(例如 g),每次我 运行 脚本然后加入它以获得类似 'g.price' 但是这有 26 个字母的限制,随机但不是唯一的,所以可以生成相同的字母(尽管我可以对此进行 'if' 检查)。
有没有简单正确的方法来做到这一点?
我不确定为什么默认情况下不插入它们,但您可以强制 Django 这样做。 正如官方文档所建议的那样:
In some rare circumstances, it’s necessary to be able to force the save() method to perform an SQL INSERT and not fall back to doing an UPDATE. Or vice-versa: update, if possible, but not insert a new row. In these cases, you can pass the force_insert=True or force_update=True parameters to the save() method. Obviously, passing both parameters is an error: you cannot both insert and update at the same time!
https://docs.djangoproject.com/en/1.10/ref/models/instances/#forcing-an-insert-or-update
Models.py:-
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=128, unique=True)
def __unicode__(self):
return self.name
class Page(models.Model):
name = models.ForeignKey(Category)
title = models.CharField(max_length=128)
url = models.URLField()
views = models.IntegerField(default=0)
price = models.IntegerField(default=0)
def __unicode__(self):
views.py:-
如果您想更新特定类别的页面,请按照以下步骤操作:-
a = Category.objects.get(name=nameField) #Fetch reference object for which category name you want to add page
x = India(symb)
b = Page.objects.filter(name=a).update(title=symb,price = float(x['Price']))
如果你想添加新的类别和页面都按照这个:-
x = India(symb)
a = Category.objects.create(name = x['Company Name'])
b = Page.objects.create(name=a,title=symb,price = float(x['Price']))
b.save()