【问题标题】:How to create new postgreSQL rows to save data every time you run your django code每次运行 django 代码时如何创建新的 postgreSQL 行以保存数据
【发布时间】:2017-02-15 13:44:37
【问题描述】:

我现在有一个疑问,当我执行我的脚本时,我能否将它保存在一行中

我的 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):

返回 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 postgresql django-orm web-development-server


    【解决方案1】:

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

    【讨论】:

    • 我认为这行得通,我今天会试试这个。所以,我也给 a.save() 和 b.save() ,对吧?每次我添加一个新类别时,它都会保存到一个新行中而不是覆盖?
    • 谢谢!这有帮助!
    【解决方案2】:

    我不确定为什么默认情况下不插入它们,但您可以强制 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

    【讨论】:

    • 所以您是说我不需要使用新变量将其保存在新行中?例如: p.title --> 进入 row1 我应该使用 a.title --> 将其保存在另一行吗?
    • @sujithjohn,你能把你的模型贴在这里吗?可能主键有问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 2013-09-10
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多