【问题标题】:django.db.utils.ProgrammingError: (1146 table doesn't exist)django.db.utils.ProgrammingError: (1146 表不存在)
【发布时间】:2019-02-18 00:06:36
【问题描述】:

我在 python django 中的迁移有问题。当我尝试执行 python manage.py makemigrations 或 migrate 时出现此错误.????‍♂️

Traceback(最近一次调用最后一次):文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\db\backends\utils.py", 第 65 行,在执行中 return self.cursor.execute(sql, params) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\db\backends\mysql\base.py", 第 101 行,在执行中 返回 self.cursor.execute(query, args) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\MySQLdb\cursors.py", 第 250 行,执行中 self.errorhandler(self, exc, value) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\MySQLdb\connections.py", 第 50 行,在默认错误处理程序中 引发错误值文件“C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\MySQLdb\cursors.py”, 第 247 行,执行中 res = self._query(查询)文件“C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\MySQLdb\cursors.py”, 第 412 行,在 _query 中 rowcount = self._do_query(q) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\MySQLdb\cursors.py", 第 375 行,在 _do_query db.query(q) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\MySQLdb\connections.py", 第 276 行,查询中 _mysql.connection.query(自我,查询) _mysql_exceptions.ProgrammingError: (1146, "表 'rc2.eduuser_role' 不存在")

上述异常是以下异常的直接原因:

Traceback(最近一次调用最后一次):文件“manage.py”,第 17 行,在 execute_from_command_line(sys.argv) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\core\management__init__.py", 第 363 行,在 execute_from_command_line utility.execute() 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\core\management__init__.py", 第 355 行,执行中 self.fetch_command(subcommand).run_from_argv(self.argv) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\core\management\base.py", 第 283 行,在 run_from_argv self.execute(*args, **cmd_options) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\core\management\base.py", 第 327 行,执行中 self.check() 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\core\management\base.py", 第 359 行,检查中 include_deployment_checks=include_deployment_checks,文件“C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\core\management\base.py”, 第 346 行,在 _run_checks 返回 checks.run_checks(**kwargs) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\core\checks\registry.py", 第 81 行,在 run_checks new_errors = check(app_configs=app_configs) 文件“C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\core\checks\urls.py”, 第 16 行,在 check_url_config 中 返回 check_resolver(resolver) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\core\checks\urls.py", 第 26 行,在 check_resolver 中 返回 check_method() 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\urls\resolvers.py", 第 254 行,检查中 对于 self.url_patterns 中的模式:文件“C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\utils\functional.py”, 第 35 行,在 get 中 res = instance.dict[self.name] = self.func(instance) File "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django \urls\resolvers.py", 第 405 行,在 url_patterns 中 模式= getattr(self.urlconf_module,“urlpatterns”,self.urlconf_module)文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\utils\functional.py", 第 35 行,在 get 中 res = instance.dict[self.name] = self.func(instance) File "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django \urls\resolvers.py", 第 398 行,在 urlconf_module 中 返回 import_module(self.urlconf_name) 文件 "C:\Users\Tim\AppData\Local\Programs\Python\Python36-32\lib\importlib__init__.py", 第 126 行,在 import_module 中 return _bootstrap._gcd_import(name[level:], package, level) File "", line 994, in _gcd_import File "",第 971 行,在 _find_and_load 文件中 “”,第 955 行,在 _find_and_load_unlocked 文件“”,第 665 行,在 _load_unlocked
文件“”,第 678 行,在 exec_module 文件“”,第 219 行,在 _call_with_frames_removed 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\ResourceCenter\urls.py", 第 24 行,在 url(r'^eduuser/', 包括("eduuser.urls", namespace="eduuser")), 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\conf\urls__init__.py", 第 50 行,包括 urlconf_module = import_module(urlconf_module) 文件 "C:\Users\Tim\AppData\Local\Programs\Python\Python36-32\lib\importlib__init__.py", 第 126 行,在 import_module 中 return _bootstrap._gcd_import(name[level:], package, level) File "", line 994, in _gcd_import File "",第 971 行,在 _find_and_load 文件中 “”,第 955 行,在 _find_and_load_unlocked 文件“”,第 665 行,在 _load_unlocked
文件“”,第 678 行,在 exec_module 文件“”,第 219 行,在 _call_with_frames_removed 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\eduuser\urls.py", 第 2 行,在 从 eduuser 导入视图文件“C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\eduuser\views.py”, 第 7 行,在 从 eduuser.forms 导入 ForgotEmailForm 文件“C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\eduuser\forms.py”, 第 107 行,在 类 ImportUserForm(forms.Form): 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\eduuser\forms.py", 第 123 行,在 ImportUserForm 中 role_choices = tuple([(u'', "Auswählen")] + list([(r.id, str(r)) for r in Role.objects.all()])) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\db\models\query.py", 第 250 行,在 iter 中 self._fetch_all() 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\db\models\query.py", 第 1118 行,在 _fetch_all 中 self._result_cache = list(self._iterable_class(self)) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\db\models\query.py", 第 53 行,在 iter 中 结果 = compiler.execute_sql(chunked_fetch=self.chunked_fetch) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\db\models\sql\compiler.py", 第 886 行,在 execute_sql 中 引发 original_exception 文件“C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\db\models\sql\compiler.py”, 第 876 行,在 execute_sql 中 cursor.execute(sql, params) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\db\backends\utils.py", 第 80 行,在执行中 return super(CursorDebugWrapper, self).execute(sql, params) File "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\db\backends\utils.py", 第 65 行,在执行中 return self.cursor.execute(sql, params) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\db\utils.py", 第 94 行,在 退出 六.reraise(dj_exc_type, dj_exc_value, traceback) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\utils\six.py", 第 685 行,在再加注中 raise value.with_traceback(tb) 文件“C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\db\backends\utils.py”, 第 65 行,在执行中 return self.cursor.execute(sql, params) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\django\db\backends\mysql\base.py", 第 101 行,在执行中 返回 self.cursor.execute(query, args) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\MySQLdb\cursors.py", 第 250 行,执行中 self.errorhandler(self, exc, value) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\MySQLdb\connections.py", 第 50 行,在默认错误处理程序中 引发错误值文件“C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\MySQLdb\cursors.py”, 第 247 行,执行中 res = self._query(查询)文件“C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\MySQLdb\cursors.py”, 第 412 行,在 _query 中 rowcount = self._do_query(q) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\MySQLdb\cursors.py", 第 375 行,在 _do_query db.query(q) 文件 "C:\Source\Git\Suisseedu\resourcecenter2\ResourceCenter\ResourceCenter\env\lib\site-packages\MySQLdb\connections.py", 第 276 行,查询中 _mysql.connection.query(self, query) django.db.utils.ProgrammingError: (1146, "Table 'rc2.eduuser_role' 不存在”)

代码:

from django.db import models
from django.utils.translation import gettext_lazy as _
from settings import base
from eduuser.managers import EduUserManager
from phonenumber_field.modelfields import PhoneNumberField
# ** AUTH USER **
from django.contrib.auth.models import (
    AbstractBaseUser,PermissionsMixin
)

# ------------
# ROLE
# ------------
class Role(models.Model):
    name = models.CharField(
        _("Role Name"),
        max_length=100,
        unique=True,
    )
    def __str__(self):
        return self.name

# -------------
# EduUser
# -------------
class EduUser(AbstractBaseUser,PermissionsMixin):

    objects = EduUserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    first_name = models.CharField(
        _("First Name"),
        default="",
        blank=False,       
        max_length=255)

    last_name = models.CharField(
        _("Last Name"),
        default = "",
        blank=False,
        max_length=255)

    eduId = models.CharField(
        _("EduId"),
        blank=False,
        unique=True,
        db_index=True,
        error_messages={
            'unique': _("A user with that eduId already exists."),
        },
        max_length=255)

    age = models.IntegerField(
        _("Age"),
        blank=True,
        null=True,
    )

    GENDER_CHOICES = (
        ('N', 'None'),
        ('M', 'Male'),
        ('F', 'Female'),
    )

    gender = models.CharField(
        _("Gender"),
        max_length=1,
        choices=GENDER_CHOICES)

    email = models.EmailField(
        _("Email"),
        max_length=255,
        unique=True,
        error_messages={
            'unique': _("A user with that email address already exists."),
        },
    )

    verify_key = models.IntegerField(blank=True, null=True)
    verify_key_expires = models.DateTimeField(blank=True, null=True)
    email_verify = models.BooleanField(default=False)

    password_forgot_key = models.CharField(
        _("Password_Forgot_Key"),
        blank=True,
        unique=True,
        max_length=255)
    password_forgot_key_expires = models.DateTimeField(blank=True, null=True)

    health_info = models.TextField(
        _("Health Informations"),
        default="No Special Informations")
    special_info = models.TextField(
        _("Special Informations"),
        default="No Special Informations")
    resume_info = models.TextField(
        _("Biography"),
        default="No Bio set")

    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)
    is_first_steps = models.BooleanField(default=True)

    date_of_birth = models.DateField(default="2000-01-01")
    school_start_date = models.DateField(default="2000-01-01")

    eduuser_read = models.ManyToManyField(
        base.AUTH_USER_MODEL,
        related_name="eduuser_read_set",
        blank=True,
    )

    eduuser_write = models.ManyToManyField(
        base.AUTH_USER_MODEL,     
        related_name="eduuser_write_set",
        blank=True,
    )

    role = models.ManyToManyField(
        "Role",
        _("Role"),
        blank=False,
        db_index=True,
    )

    address = models.ForeignKey("country.Address",
        blank=True,
        null=True,
        default=None,
    )

    phone_number = PhoneNumberField(blank=True)

    def get_full_name(self):
        # The user is identified by their email address
        return "" + self.first_name + " " + self.last_name 
    def get_short_name(self):
        # The user is identified by their email address
        return self.email
    def has_perm(self, perm, obj=None):
        "Does the user have a specific permission?"
        # Simplest possible answer: Yes, always
        return True
    def has_module_perms(self, app_label):
        "Does the user have permissions to view the app `app_label`?"
        # Simplest possible answer: Yes, always
        return True
    def is_staff(self):
        "Is the user a member of staff?"
        # Simplest possible answer: All admins are staff
        return self.is_admin
    def __str__(self):
        if self.first_name and self.last_name:
            return "" + self.first_name + " " + self.last_name
        else:
            return "" + self.email

# -------------
# Import Maching Table
# -------------

class ImportMatch(models.Model):

    role = models.OneToOneField(
        "Role",
        blank=False,
        db_index=True,
        related_name="role_host_set"
    )

    role_allowed = models.ManyToManyField(
        "Role",
        blank=False,
        db_index=True,
        related_name="allowed_role_set"
    )

    def __str__(self):
        return "" + str(self.role) + " Import Allowed Table"

# -------------
# Import Role Mapper
# -------------
class RoleMapper(models.Model):

    role = models.OneToOneField(
        "Role",
        blank=False,
        db_index=True,
    )

    role_map = models.TextField(
        _("Trennen mit Komma"),
        blank=False,
    )

    def __str__(self):
        return "" + str(self.role) + " Mapper"

有人可以帮我解决这个问题吗? 版本 Python:3.6.6 版本 Django:1.11.3

编辑:

role_choices = tuple([(u'', "Auswählen")] + list([(r.id, str(r)) for r in Role.objects.all()]))
role = forms.ChoiceField(widget=forms.Select, choices=role_choices)

【问题讨论】:

  • 听起来好像有东西在加载模块时试图查询角色表(例如Role.objects.all()),但我们无法从您发布的代码中判断问题出在哪里。请在您的问题中包含完整的回溯。
  • 另外,请说明您是否对数据库或数据库设置进行了任何更改,并发布命令的完整输出。
  • 问题出在 eduuser/forms.py 中,正如 Alasdair 所说,您正在类定义中进行查询。显示该表单的代码会更好,但通常您应该使用带有查询集的 ModelChoiceField,而不是带有从模型中查询的一组选项的 ChoiceField。
  • @DanielRoseman 在编辑中,您可以看到表单中的行。我应该做哪些改变?

标签: python django django-models


【解决方案1】:

对于包含模型选项的表单字段,您应该始终将 ModelChoiceField 与查询集一起使用。

role = forms.ModelChoiceField(queryset=Role.objects.all(), empty_label="Auswählen")

在那里使用静态选项不仅会给您带来您遇到的问题,而且还会阻止选项在添加或编辑角色对象时更新。使用 ModelChoiceField 将在适当的时间进行查询,确保它始终是最新的。

【讨论】:

    【解决方案2】:

    我有类似的错误。

    原因是我在添加新模型后没有运行迁移。

    【讨论】:

      猜你喜欢
      • 2021-10-17
      • 1970-01-01
      • 2018-12-16
      • 2018-08-05
      • 2015-06-06
      • 2014-02-03
      • 2014-07-26
      • 2018-01-29
      • 2012-11-05
      相关资源
      最近更新 更多