Django操作错误:缺少表;迁移无法识别缺少的表

Django操作错误:缺少表;迁移无法识别缺少的表,django,database,sqlite,migration,Django,Database,Sqlite,Migration,我在Django 1.7中遇到了问题,我试图将用户保存到一个表中,但得到了一个错误,即该表不存在 以下是我正在执行的代码: from django.conf import settings from django.contrib.auth import BACKEND_SESSION_KEY, SESSION_KEY, get_user_model User = get_user_model() from django.contrib.sessions.backends.db import Se

我在Django 1.7中遇到了问题,我试图将用户保存到一个表中,但得到了一个错误,即该表不存在

以下是我正在执行的代码:

from django.conf import settings
from django.contrib.auth import BACKEND_SESSION_KEY, SESSION_KEY, get_user_model
User = get_user_model()
from django.contrib.sessions.backends.db import SessionStore
from django.core.management.base import BaseCommand
class Command(BaseCommand):

    def handle(self, email, *_, **__):

        session_key = create_pre_authenticated_session(email)
        self.stdout.write(session_key)


def create_pre_authenticated_session(email):
    user = User.objects.create(email=email)
    session = SessionStore()
    session[SESSION_KEY] = user.pk
    session[BACKEND_SESSION_KEY] = settings.AUTHENTICATION_BACKENDS[0]
    session.save()
    return session.session_key
然而,在

    user = User.objects.create(email=email)  
我收到一条错误信息:

 django.db.utils.OperationalError: no such table: accounts_user  
下面是accounts/models.py上的用户模型,我正试图使用它来构建表:

from django.db import models
from django.utils import timezone

class User(models.Model):
    email = models.EmailField(primary_key=True)
    last_login = models.DateTimeField(default=timezone.now)
    REQUIRED_FIELDS = ()
    USERNAME_FIELD = 'email'

    def is_authenticated(self):
        return True
我已经使用manage.py accounts 0001.initial运行了sqlmigrate,并且我已经获得了正确的创建表SQL,但是运行manage.py migrate给出了以下信息:

Operations to perform:
  Apply all migrations: sessions, admin, lists, contenttypes, accounts, auth
Running migrations:
  No migrations to apply. 

迁移只是从shell运行“makemigration”的结果,没有自定义代码。我确实看到了包含的应用程序中列出的帐户,但迁移没有运行,因此我的站点处于一个奇怪的位置,Django说当我尝试使用它时,该表丢失了,但是Django说,当我尝试运行迁移来创建它时,它已经存在了。
为什么Django错误地认为,当我可以查看数据库时,它已经存在了,但它没有存在?

@user856358您对另一个sqlite文件的评论似乎是根本原因。我遇到了相同的错误,通过删除该文件并运行另一次迁移,问题得到了解决。在我的例子中,该文件是按照
settings.py
中指定的位置定位的:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, '../database/db.sqlite3'),
    }
}
通过删除那里的.sqlite3文件,我成功地运行了迁移并解决了无此类表错误

django.db.utils.OperationalError: no such table: accounts_user
$ rm ../database/db.sqlite3 
$ python3 manage.py migrate

运行
python manage.py makemigrations--app name
,然后再运行
python manage.py migrate
//或者检查您是否伪造了之前的
migrate
过程您正在编写Harry Percival的测试驱动设计书,对吗?我遇到了完全相同的问题。埃里克:我想出了一个适合我的解决办法。事实证明,我没有遗漏任何一步,但他放置sql文件的位置与Django自然创建sql文件的位置不同。Django的基本sqlite文件位于src/db.sqlite3下。但是,如果您在src/superlists/db.sqlite3下查看,您会发现另一个sqlite文件是按照BASE_DIR的设置所给出的路径创建的。我怀疑这种差异是因为这本书使用了较旧版本的Django。你如何为你的Django应用提供服务?您确定manage.py和web服务器中的
DJANGO\u设置\u模块
相同吗?