背景信息: 我是 django 的初学者,更好地配备了 python 和 mysql(以及 mariaDB)的初学者。我在以下版本的 Windows 7 环境中工作:
- django 1.9.1
- 玛丽亚数据库 10.0.20
- Python 3.4.4
- mysql-connector\Python 2.1.3 用于 Python 3.4
目标: 我正在尝试使用 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 问题与恢复错误:'请在 IMPORT 之前丢弃表空间'。所选答案中对此进行了很好的解释。
我认为这与我的问题有关,但无法弄清楚有什么帮助以及如何处理。
编辑 v3 29.1。 最后我注意到文件给出了 django 错误。它是 django 的迁移记录器,位于第 59 行的 C:\Python34\lib\site-packages\django\db\migrations\recorder.py。
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 文件。
为什么会发生这种情况超出了我的范围。