28

在 Django 中,我在models.py. 之后manage.py makemigrationsmanage.py migrate引发了这个异常:

django.db.utils.OperationalError: no such table: auth_test_usertranslatorprofile

因此,我删除了所有旧迁移makemigrationsmigrate再次运行,这似乎有效。

不幸的是,我注意到它没有帮助,因为当我尝试单击它User customer profilesUser translator profiles会引发异常:

环境:

Request Method: GET
Request URL: http://127.0.0.1:8000/admin/auth_test/usertranslatorprofile/

Django Version: 1.8.7
Python Version: 2.7.10
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'auth_test')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django.middleware.security.SecurityMiddleware')


Traceback:
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
  132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Python27\lib\site-packages\django\contrib\admin\options.py" in wrapper
  618.                 return self.admin_site.admin_view(view)(*args, **kwargs)
File "C:\Python27\lib\site-packages\django\utils\decorators.py" in _wrapped_view
  110.                     response = view_func(request, *args, **kwargs)
File "C:\Python27\lib\site-packages\django\views\decorators\cache.py" in _wrapped_view_func
  57.         response = view_func(request, *args, **kwargs)
File "C:\Python27\lib\site-packages\django\contrib\admin\sites.py" in inner
  233.             return view(request, *args, **kwargs)
File "C:\Python27\lib\site-packages\django\utils\decorators.py" in _wrapper
  34.             return bound_func(*args, **kwargs)
File "C:\Python27\lib\site-packages\django\utils\decorators.py" in _wrapped_view
  110.                     response = view_func(request, *args, **kwargs)
File "C:\Python27\lib\site-packages\django\utils\decorators.py" in bound_func
  30.                 return func.__get__(self, type(self))(*args2, **kwargs2)
File "C:\Python27\lib\site-packages\django\contrib\admin\options.py" in changelist_view
  1550.                 self.list_max_show_all, self.list_editable, self)
File "C:\Python27\lib\site-packages\django\contrib\admin\views\main.py" in __init__
  82.         self.get_results(request)
File "C:\Python27\lib\site-packages\django\contrib\admin\views\main.py" in get_results
  177.         result_count = paginator.count
File "C:\Python27\lib\site-packages\django\core\paginator.py" in _get_count
  72.                 self._count = self.object_list.count()
File "C:\Python27\lib\site-packages\django\db\models\query.py" in count
  318.         return self.query.get_count(using=self.db)
File "C:\Python27\lib\site-packages\django\db\models\sql\query.py" in get_count
  466.         number = obj.get_aggregation(using, ['__count'])['__count']
File "C:\Python27\lib\site-packages\django\db\models\sql\query.py" in get_aggregation
  447.         result = compiler.execute_sql(SINGLE)
File "C:\Python27\lib\site-packages\django\db\models\sql\compiler.py" in execute_sql
  840.             cursor.execute(sql, params)
File "C:\Python27\lib\site-packages\django\db\backends\utils.py" in execute
  79.             return super(CursorDebugWrapper, self).execute(sql, params)
File "C:\Python27\lib\site-packages\django\db\backends\utils.py" in execute
  64.                 return self.cursor.execute(sql, params)
File "C:\Python27\lib\site-packages\django\db\utils.py" in __exit__
  98.                 six.reraise(dj_exc_type, dj_exc_value, traceback)
File "C:\Python27\lib\site-packages\django\db\backends\utils.py" in execute
  64.                 return self.cursor.execute(sql, params)
File "C:\Python27\lib\site-packages\django\db\backends\sqlite3\base.py" in execute
  318.         return Database.Cursor.execute(self, query, params)

Exception Type: OperationalError at /admin/auth_test/usertranslatorprofile/
Exception Value: no such table: auth_test_usertranslatorprofile

我附上我的文件:

模型.PY:

from django.db import models
from django.contrib.auth.models import User

class Language(models.Model):
    shortcut = models.CharField(max_length=6)
    name = models.CharField(max_length=50)
    price_per_sign = models.FloatField()

class UserTranslatorProfile(models.Model):
    user = models.OneToOneField(User)
    languages = models.ManyToManyField(Language)
    price_per_word = models.FloatField()

class UserCustomerProfile(models.Model):
    user = models.OneToOneField(User)

管理员.PY:

from django import forms
from .models import Language
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class FreelancerRegistrationForm(forms.Form):
    language = forms.ModelChoiceField(queryset=Language.objects.all().order_by('shortcut'))

你知道问题出在哪里吗?谢谢

4

23 回答 23

80

我用这些步骤解决了同样的问题:

  • 删除db.sqlite3项目目录中的数据库(在我的情况下)
  • __pycache__项目子目录下的文件夹中删除所有内容
  • 对于您要修复的应用程序,转到文件夹并清除migrations__pycache__目录

当您确定已清除所有上述文件时,运行:

python manage.py makemigrations
python manage.py migrate

我希望这有帮助。

于 2016-04-06T13:43:24.817 回答
36

另一种情况可能会产生no such table错误。如果您的views.py 或类似文件执行导入时尝试访问数据库的代码,即导入views.py 有副作用,那么从头开始将不起作用

当您的代码使用现有数据库时会发生这种情况,而现在您尝试在没有数据库的情况下开始。只需更改views.py,这样它就可以在没有副作用的情况下导入。如果您不想修复设计,请执行以下操作:

from django.db.utils import OperationalError
format_list = [('', '(all)')]
geom_type_list = [('', '(all)')]
try:
    format_list.extend([(i[0],i[0]) 
        for i in Format.objects.values_list('name')])
    geom_type_list.extend([(i[0],i[0]) 
        for i in Geom_type.objects.values_list('name')])
except OperationalError:
    pass  # happens when db doesn't exist yet, views.py should be
          # importable without this side effect
于 2016-04-08T15:41:40.687 回答
34

在命令下方运行。一旦这个问题解决了我

manage.py 迁移 --run-syncdb

于 2019-04-23T17:33:36.140 回答
17

为了解决这个问题,我这样做了(在 Ubuntu 上,您需要针对 Windows 调整命令):

1.删​​除所有迁移文件

find . -path "*/migrations/*.py" -not -name "__init__.py" -delete

find . -path "*/migrations/*.pyc"  -delete

2.删除db.sqlite3

rm db.sqlite3

3. 创建并运行迁移:

python manage.py makemigrations
python manage.py migrate

4. 同步数据库:

manage.py migrate --run-syncdb

有点痛苦,因为您需要删除数据库,但对于测试系统来说很好。从这个一般优秀的资源中得到了除了最后一步之外的所有内容:https ://simpleisbetterthancomplex.com/tutorial/2016/07/26/how-to-reset-migrations.html

于 2019-10-13T09:20:39.750 回答
9

添加到 terry_brown 的答案中,这就是导致我的问题的原因。我有一个自定义用户模型,其中 ForeignKey 是另一个模型。我将默认设置为数据库中的第一个对象。当我在数据库中有数据时,它起作用了。但是当我从头开始时,它不起作用,因为它在导入时立即执行(所以甚至没有通过迁移)。

class User(AbstractBaseUser, PermissionsMixin):
    subscription_plan = models.ForeignKey(SubscriptionPlan, default=SubscriptionPlan.objects.first().id)

我不得不牺牲它default(评论出来)。

更新:更好的解决方案是使用初始迁移或固定装置预填充您的数据库。

于 2016-12-05T15:50:53.247 回答
7

使用 Django,我必须执行:

python manage.py migrate --run-syncdb

于 2021-01-12T22:26:47.510 回答
3

请按照以下步骤解决此问题。

python manage.py migrate --fake APPNAME zero

这将使您的迁移变得虚假。现在您可以运行迁移脚本

python manage.py migrate APPNAME

或者

python manage.py migrate

将创建表格,您解决了您的问题.. 干杯!!!

于 2020-02-17T20:49:11.950 回答
2

由于 Django 的数据库而发生此错误,这不是用户错误。它最简单的解决方案是创建具有不同名称的新应用程序。然后创建相同的模型,然后运行​​python manage.py makemigrations然后迁移。通过这样做,您的错误应该得到解决

于 2021-04-27T12:33:58.237 回答
2

我阅读了其他团队给出的上述答案。主要是要求删除 SQLite(DB) 并重置“迁移”文件夹。

如果您在生产环境中工作,那么这将不是正确的选择。

  1. python manage.py migrate --fake APPNAME zero
  2. python manage.py migrate APPNAME
  3. python manage.py makemigrations APPNAME
  4. python manage.py migrate APPNAME

这四个步骤足以解决这个问题。

于 2020-03-07T05:42:49.980 回答
1

我有同样的问题。以上解决方案都不适合我。这一切可能始于我添加一个新模型,在数据库中有一些对象,然后我更改了模型的名称。我需要从我的应用程序中删除整个模型,然后运行应用程序的管理页面。然后我通过在我删除它的所有文件中单击 ctrl + z 来恢复模型,最后我能够运行 makemigrations 和 migrate 命令。

于 2020-04-13T07:41:54.277 回答
1

在运行任何管理命令“django.contrib.admin”时,会自动尝试在已安装的应用程序中发现和 admin.py 模块。

如果有与数据库相关的代码,当在数据库中找不到与数据相关的表时,它会自动运行并尝试从数据库中加载数据,抛出此错误。

要修复此错误,只需更改"django.contrib.admin"INSTALLED_APPS"django.contrib.admin.apps.SimpleAdminConfig"它将阻止“django.contrib.admin”自动发现和运行管理模块。

django.contrib.admin 自动执行已安装应用程序中管理模块的自动发现。为了防止它,将你的 INSTALLED_APPS 更改为包含 'django.contrib.admin.apps.SimpleAdminConfig' 而不是 'django.contrib.admin'。

https://docs.djangoproject.com/en/3.0/ref/applications/#troubleshooting

于 2019-12-04T12:38:00.537 回答
0

你不需要视图来进行迁移。注释掉 urls.py 中对其他应用程序的所有引用,清除 db 和旧迁移,运行 makemigrations,然后重新注释您的 urls.py。为我工作。

于 2020-02-23T09:13:28.503 回答
0

如果上述解决方案均不适合您,请添加appnameandmakemigration命令migrate

 makemigration login
 migrate login

这可能会帮助您找出问题所在。

于 2020-01-09T19:35:29.287 回答
0

如果其他人有这个问题并且接受的解决方案不起作用,请查看您的数据库路径,数据库路径应该是绝对路径, 'NAME': '/pathto-db/default.db',

关联

于 2018-11-04T10:41:54.003 回答
0

创建模型时出现此错误。我打开了 db.sqlite3 文件并使用 SQLite DB Browser 为模型创建了一个表。然后我创建了一个迁移并假迁移它。不知道是什么导致了这个问题,但这个解决方法有帮助。

于 2020-04-04T14:18:29.617 回答
0

也许没时间了,但是...当我尝试将 Django 1.11 安装“克隆”到其他目录然后最初尝试管理 makemigrations 时,我遇到了同样的问题。

我通过以下方式解决问题:

  1. 通过以下方式设置初始 Django 安装和创建主应用程序:

django-admin.py startproject app_name

  1. 初始迁移管理 makemigrations,管理迁移

  2. 设置超级用户:

管理创建超级用户

  1. 复制除主目录中的 urls.py 和 settings.py 之外的所有文件和目录(Django 应用程序)

  2. 将所有应用程序添加到 INSTALLED_APPS

  3. 管理 makemigrations, 管理迁移

  4. 从源 Django 应用程序目录复制 settings.py 和 urls.py

那就是没有错误,一切正常。

彼得

于 2018-10-18T14:57:57.537 回答
0

我对我的数据库进行了一些更改,并面临同样的问题。没有一个解决方案对我有用,所以花了几个小时后,我终于决定删除“db.sqlite3”文件并运行 makemigrations 和 migrate 命令。之后它工作正常。但是这个解决方案不是立即使用的好方法,只有在你没有选择的时候才使用它。

于 2021-12-24T22:01:48.137 回答
0

有同样的错误并且没有删除数据库:

  • 移除迁移
  • 消除__pychache__
  • python manage.py makemigrations --empty alias
  • python manage.py makemigrations alias
  • python manage.py migrate alias zero
  • 再次删除迁移
  • 再次删除__pycache__
  • python manage.py makemigrations
  • python manage.py migrate alias zero

其中 alias 是应用程序名称。

于 2020-12-04T14:08:32.040 回答
0

如果您已删除数据库并立即迁移,则会发生这种情况。

例如,如果您的错误说没有这样的表table1,那么

  • python manage.py makemigrations
  • python manage.py 迁移
  • python manage.py table1 app1

这里table1是表的名称,app1是 table1 模型所在的 Django 应用程序名称。

于 2020-12-21T18:25:10.283 回答
0

我知道这通常通过删除开发过程中使用的 de sqlite3 DB 来解决。

另外,我知道这个问题目前已经解决,但我想把我的案子留在这里作为替代方案。

有时,当我们在编程时,我们会更改模型中的很多东西。当我们运行python manage.py makemigrations一个文件时,我们的app folder/migrations. 而当我们python manage.py migrate在表中运行记录时,django_migrations 就会被创建。该记录包含我们必须详细检查的 3 个字段:

  • 1 - 名称(这是在迁移应用程序文件夹中创建的文件名)
  • 2 - 应用程序(这是我们应用程序的名称。也可以像命名空间一样工作以防止冲突)
  • 3 - 已应用(这是执行迁移的日期时间)。

如果您之前修改过模型,则迁移中应该有多个文件(数量与您在每次更改时执行 makemigrations 的时间相应),在我的情况下,我想删除这些文件只是为了只有一个迁移文件。

这样做的问题是,当再次运行 makemigrations 时,它会创建一个文件 0001_initial.py。如果你记得表django_migrations包含这个文件的日志,这是为了防止执行已经完成的迁移。

如果是这种情况,您将从该表中删除您的应用程序迁移记录。

于 2021-06-20T06:05:18.960 回答
0

你会删除生产银行吗?我看到很多已经删除了sqlite,但是如果是生产银行呢?

从 django_migrations tableless contenttypes 中删除数据的解决方案

已经在表 django_content_type 你远程 app_label

在迁移文件夹中删除除了init .py之外的所有内容

python manage.py makemigrations

python manage.py migrate --fake

这就是我解决应用程序重复问题的方法(安装插件后我有两个同名的应用程序)并且 django 创建了丢失的表等。

在我正常工作的情况下

于 2020-05-23T19:08:56.733 回答
-1

我面临同样的错误。我用来解决这个问题的步骤是:

  1. 确保migrations您的应用程序中有文件夹。如果没有,请migrations在 app 文件夹中创建文件夹,然后__init__.py在文件夹中创建文件。

  2. 如果该migrations文件夹已经存在,则删除所有migration files.

  3. 删除默认的数据库文件db.sqlite3

  4. 运行命令python manage.py makemigrations

  5. python manage.py migrate

于 2020-08-14T10:19:41.190 回答
-1

The only way to fix my error was commenting out every single file. This error might occur while a file thinks the database is not empty, or that it actually exists.

I just commented out the entire project, migrated, uncommented the models.py file, migrated again, uncommented the entire project. I have no idea why it worked.

于 2020-11-05T21:37:58.123 回答