我有一个脚本,用于从django中的.txt文件填充sqlite3数据库,但是一旦数据加载到其中,我似乎无法用pk引用对象。我可以通过执行./manage.py shell
确认已加载数据并导入City模型并执行City.objects.all()
显示模型已加载到数据库中但如果我City.object.get(pk=1)
则认为城市对象不存在。
我以前遇到过数据库的一些问题所以我最近做了./manage.py flush
,然后用脚本重新输入数据。事情开始成为一个问题。有什么想法吗?
此外,我知道我并不严格需要uniqueID值,但我不认为这会导致问题,过去也没有。
加载数据的脚本:
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mygame.settings")
from geogame.models import City
f = open("testing.txt", 'r').readlines()
i = 1
for line in f:
line = line.strip('\n')
line = line.split('\t')
line[6] = 1
line[7] = 100
c = City(name=line[1], uniqueID=i, xcoord=int(line[3]), ycoord=int(line[2]), country=line[4], population=line[5], times_played=line[6], average_distance=line[7], difficulty_rating=line[8])
c.save()
i+=1
models.py
文件
from django.db import models
class City(models.Model):
name = models.CharField(max_length=50)
uniqueID = models.IntegerField(default=0)
ycoord = models.IntegerField(default=0)
xcoord = models.IntegerField(default=0)
country = models.CharField(max_length=50)
population = models.IntegerField(default=0)
times_played = models.IntegerField(default=0)
average_distance = models.FloatField(default=0)
difficulty_rating = models.FloatField(default=0)
def __unicode__(self):
return self.name
错误信息:
>>> City.objects.get(pk=1)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/Library/Python/2.7/site-packages/django/db/models/manager.py", line 127, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/Library/Python/2.7/site-packages/django/db/models/query.py", line 334, in get
self.model._meta.object_name
DoesNotExist: City matching query does not exist.
答案 0 :(得分:1)
尝试在id=i
中添加c = City()
。因此,每次创建一个新ID时,id都会加1。
c = City(id=i, name=line[1], uniqueID=i,
xcoord=int(line[3]), ycoord=int(line[2]),
country=line[4],
population=line[5], times_played=line[6], average_distance=line[7],
difficulty_rating=line[8])
答案 1 :(得分:1)
id
类型为AutoField。添加新行时,这种类型的firld自动递增值。
您可以在创建新行时覆盖id
c = City(id=1, name='test', ...)
c.save()
City.objects.get(pk=1)
或在保存模型
后读取插入的id
c = City(name='test', ...)
c.save()
lastId = c.pk
City.objects.get(pk=lastId)