背景信息 我是django的初学者,更好地配备了python和mysql中的初学者(因此也是mariaDB)。 我在Windows 7环境中使用以下版本:
目标: 我正在尝试使用django为它构建mariaDB数据库和基于Web的用户界面。我已事先在mysql中构建了数据库,现在我正在尝试使用此数据库创建django项目作为旧数据库。
问题: 我已将模型检索到我的django项目,如下所示:
python manage.py inspectdb > models.py
它工作正常。检查models.py,他们似乎应该这样做。
现在,如果我尝试迁移以创建基于django的表到我的遗留数据库,如下所示:
python manage.py migrate
我持续收到大量嵌套错误:
django.db.migrations.exceptions.MigrationsSchemaMissing: Unable to create the django_migrations table (Table 'mydb'.'django_migrations' already exists. Please DISCARD the tablespace before IMPORT.)
我认为该表在之前的尝试中保留在我的数据库文件夹中,但删除它并没有帮助。即使我从数据库命令提示符检查剩下的唯一表是我的数据库本机,仍然会弹出相同的错误消息。在某些时候,我想知道我使用的连接器是否存在一些问题,因为它不是推荐的连接器(mysqlclient)。
某处,我发现甚至不需要迁移。这显然可以拯救我,但我不知道,如果这是我能解决的问题。理想情况下,数据库稍后将在线管理,具有管理员帐户的用户可以在那里添加条目。否则,数据库应该只是返回数据。
编辑:修正了python manage.py inspectdb>的错误信息。 models.py行
编辑29.1。 以:
运行迁移python manage.py migrate --fake
导致同样的错误。
即使删除了django项目并重新启动它,问题仍然存在。
编辑v2 29.1。 数据库文件夹中的django_migrations表只有一个必需的表文件。应该有django_migrations.ibd和django_migrations.frm。但是,在运行迁移后,只有一个文件:django_migrations.ibd。
这里有类似的东西,有不同的文件 mysqldump problems with restore error: 'Please DISCARD the tablespace before IMPORT'。在所选答案中对此进行了详细解释。
我认为这与我的问题有关,但无法弄清楚什么可以帮助以及如何处理这个问题。
编辑v3 29.1。 最后我注意到文件给出了django错误。它是第59行的C:\ Python34 \ lib \ site-packages \ django \ db \ migrations \ recorder.py中的django迁移记录器。
def ensure_schema(self):
"""
Ensures the table exists and has the correct schema.
"""
# If the table's there, that's fine - we've never changed its schema
# in the codebase.
if self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor()):
return
# Make the table
try:
with self.connection.schema_editor() as editor:
editor.create_model(self.Migration)
except DatabaseError as exc:
raise MigrationSchemaMissing("Unable to create the django_migrations table (%s)" % exc)
引发错误的最后一行是第59行。有趣的是,如果表存在,该函数应该有效。我能想到的(就像在我之前的编辑中一样),确实是出于某种原因,在迁移过程中不会创建frm文件。
为什么会发生这种情况超出我的范围。