Django OperationalError:缺少表格;迁移无法识别丢失的表

时间:2015-01-07 07:07:59

标签: 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 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错误地认为该表已经存在?

1 个答案:

答案 0 :(得分:2)

@ user856358您对其他sqlite文件的评论似乎是根本原因。我遇到了同样的错误,它通过删除该文件并运行另一个迁移来解决。就我而言,该文件的位置与settings.py

中指定的相同
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, '../database/db.sqlite3'),
    }
}

通过删除那里的.sqlite3文件,我能够成功运行迁移并解决no-such-table错误......

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