Django主键不存在

Django主键不存在,django,Django,我有一个脚本,我正在使用它从django中的.txt文件填充sqlite3数据库,但是一旦数据加载到其中,我似乎无法用pk引用对象。我可以通过执行/manage.py shell和导入城市模型以及执行城市对象来确认数据已加载。all()显示模型已加载到数据库中,但如果执行城市对象.get(pk=1)则认为城市对象不存在 我以前在数据库中遇到过一些问题,所以我最近进行了/manage.py flush,然后用脚本重新输入数据。这是事情开始成为一个问题的时候。有什么想法吗 我也知道我并不严格需要un

我有一个脚本,我正在使用它从django中的.txt文件填充sqlite3数据库,但是一旦数据加载到其中,我似乎无法用pk引用对象。我可以通过执行
/manage.py shell
和导入城市模型以及执行
城市对象来确认数据已加载。all()
显示模型已加载到数据库中,但如果执行
城市对象.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.
>City.objects.get(pk=1)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/Library/Python/2.7/site packages/django/db/models/manager.py”,第127行,在manager\u方法中
返回getattr(self.get_queryset(),name)(*args,**kwargs)
get中的文件“/Library/Python/2.7/site packages/django/db/models/query.py”,第334行
self.model.\u meta.object\u name
DoesNotExist:城市匹配查询不存在。

尝试在
c=City()中添加
id=i
。因此,每次创建新的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])  

id
在您的模型中具有类型。添加新行时,这种类型的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)

我的猜测是,
pk=1
的记录已被删除。但我原以为刷新后,所有pk都将重新可用?请尝试在
c=City()
中添加
id=I
。因此,每次你创建一个新的id时,id都会向其中添加1。这似乎起到了作用,谢谢@qasimalbaqali。从我阅读的文档中,它并没有说您需要显式地增加id。@SamuelBarnett截断表不会重置生成id的序列,您需要使用UPDATE命令显式地执行此操作。