python/django 循环创建填充0000-9999的数据库

0 投票
4 回答
701 浏览
提问于 2025-04-15 14:56

基本上,我创建了一个视图,用来把从0000到9999的序列模型填充到我的数据库里。下面是我用来创建这个视图的代码。

def insert_serials(request):
    for i in range(0,10000):
    serial = Serial(i,False)
    serial.save()
    else:
    print 'The for loop is over'

我想知道这样做的正确方法是什么,因为我遇到了一个完整性错误,提示有重复的键。我的模型定义如下:

class Serial(models.Model):
    serial = models.CharField(max_length=4)
    closed = models.BooleanField()

    def __unicode__(self):
        return "%s" %(self.serial)

    def get_absolute_url(self):
        return "/draw/serial/%s/" % (self.serial)

4 个回答

1

可能会有位置默认参数,试着使用关键字参数:

from django.db import transaction

@transaction.commit_manually
def insert_serials(request):
    for i in range(0,10000):
        serial = Serial(serial=str(i),closed=False)
        serial.save()
    transaction.commit()
    print 'The for loop is over'

它被包裹在一个事务中,这样可以稍微加快速度。有关详细信息,请查看 transaction.commit_manually

1

你的代码在我的网站上运行得很好 - 我用的是Mac OS X,Python 2.6.3,django的最新版本,还有sqlite3。

不过,我稍微改了一下你的视图函数代码 -

from django.http import HttpResponse
from models import Serial

def insert_serials(request):
    for i in range(0,10000):
        serial = Serial(i,False)
        serial.save()
    return HttpResponse("Serials are inserted")
0

你的id字段(因为在模型中没有定义主键,所以可以推测)没有正确地自动编号。因此,第一次插入之后的每次插入都会因为id值重复而失败。请问你的数据库是什么?是让Django自动创建的表,还是你自己手动创建的?

撰写回答