在django中迁移到旧数据库会出现错误

时间:2016-01-27 13:55:56

标签: mysql django python-3.4 legacy-database

背景信息 我是django的初学者,更好地配备了python和mysql中的初学者(因此也是mariaDB)。 我在Windows 7环境中使用以下版本:

  • django 1.9.1
  • mariaDB 10.0.20
  • Python 3.4.4
  • mysql-connector \ Python 2.1.3 for 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 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文件。

为什么会发生这种情况超出我的范围。

0 个答案:

没有答案