python/django 循环创建填充0000-9999的数据库
基本上,我创建了一个视图,用来把从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自动创建的表,还是你自己手动创建的?