如何在每次运行django代码时创建新的postgreSQL行来保存数据

时间:2017-02-15 13:44:38

标签: django postgresql django-orm web-development-server

我现在怀疑,当我执行我的脚本时,我能够将其保存在一行

我的models.py有2个表(或类)页面和类别

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个字母的限制,随机但不是唯一的,所以可以生成相同的字母(虽然我可以做一个'如果'检查那个)。

这是否有一种简单而恰当的方法。

2 个答案:

答案 0 :(得分:0)

我不确定为什么默认情况下不插入它们,但你可以强制Django这样做。 正如官方文件所示:

  

在极少数情况下,必须能够强制save()方法执行SQL INSERT而不是回退到执行UPDATE。反之亦然:如果可能,请更新,但不要插入新行。在这些情况下,您可以将force_insert = True或force_update = True参数传递给save()方法。显然,传递这两个参数是一个错误:你不能同时插入和更新!

https://docs.djangoproject.com/en/1.10/ref/models/instances/#forcing-an-insert-or-update

答案 1 :(得分:0)

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()