`table" django_migrations" Python 3和SQLite3

时间:2018-03-27 01:54:25

标签: python django python-3.x sqlite python-3.6

我最近收到的错误是我在使用SQLite识别Django项目时遇到问题。下面链接的项目是以前与Python 2/3兼容的,虽然我主要使用Python 2运行它。最近,我将大多数计算机和项目切换为默认使用Python 3(我知道,迟到总比没有好,对吧?)。此外,我将项目从Django 1.7升级到1.11。在此之后,项目在使用table already exists运行migrate命令时开始收到python3错误,但

运行python3 manage.py migrate时,我才会收到错误消息。例如,python3 manage.py test工作正常,考虑到测试首次运行迁移,这有点令人困惑。运行python2 manage.py migrate工作得很好,没有错误。

我正在运行Python 3.6.4,在Mac上通过Homebrew安装,我收到的错误是:

File "/usr/local/lib/python3.6/site-packages/django/db/migrations/recorder.py", line 59, in ensure_schema
   raise MigrationSchemaMissing("Unable to create the django_migrations table (%s)" % exc)
django.db.migrations.exceptions.MigrationSchemaMissing: Unable to create the django_migrations table (table "django_migrations" already exists)

我遇到了同样的问题 - 用Python 3破解但在多台计算机上使用Python 2,所以我想象其他人会看到同样的问题。您应该能够通过以下步骤重现该问题:

  1. git clone git@github.com:alexdlaird/django-bootstrap-authentication-template-project.git && cd django-bootstrap-authentication-template-project
  2. make install
  3. python2 manage.py migrate - 请注意,它可以正常使用
  4. rm db.sqlite重新开始
  5. python3 manage.py migrate - 请注意,它失败并显示上面显示的错误 5倍。 rm db.sqlite重新开始 5倍。 python3 manage.py test - 请注意,它运作正常
  6. 要查看针对MySQL实例运行的迁移(该项目假设您有一个本地运行的默认Homebrew MySQL实例,但如果没有,则可以在.env中配置),运行python3 manage.py migrate并观察这适用于Python 2或3,因此问题似乎与SQLite迁移隔离。

    有什么想法吗?我在这里做错了什么?

    - .pyc更新 -

    我在运行上述命令之间执行了find . -name \*.pyc -delete,但这对缓解情况没有任何作用。这是有道理的,因为新问题仍存在问题,但我认为我们可以将其作为Python缓存文件的问题消除。

2 个答案:

答案 0 :(得分:1)

终于找到了它。对于可能遇到类似问题的其他人,我的项目中的违规行是我必须删除的:https://github.com/alexdlaird/django-bootstrap-authentication-template-project/commit/db16ff88d0d6c25eed38e52bd8332c721ed21e2f?diff=split#diff-e398a065684e871bec35f76ea80f20a7

这是一个用于Python 2.5 / 6和SQLite的老旧黑客的工件(参见here) - 它绝不是一个好的解决方案,但鉴于SQLite仅用于dev和测试,它工作得很好。这肯定比在几个小时内对抗Python 2 / SQLite unicode不兼容性更好。

毫不奇怪,我很久以前就忘记了这个黑客攻击,直到我调试Django代码(在the comment above中描述)并且意识到为什么字符串表名称有丑陋的字节时,它才发生在我身上包装

答案 1 :(得分:0)

每次尝试前清除django迁移缓存。

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