PyTest-Django 在缺少 django_migration 表时失败

Posted

技术标签:

【中文标题】PyTest-Django 在缺少 django_migration 表时失败【英文标题】:PyTest-Django Failing on missing django_migration table 【发布时间】:2017-06-05 20:05:11 【问题描述】:

我正在尝试将 pytest-django 添加到我当前的 pytest3/Django1.7 环境中。

目前我们没有使用该插件,并且在某些测试之间存在共享状态

当我收到以下错误消息时,一切看起来都很好,并且测试似乎一直通过:

request = <SubRequest '_django_db_marker' for <Function 'test_filter_recurring_outside_sync_window'>>

    @pytest.fixture(autouse=True)
    def _django_db_marker(request):
        """Implement the django_db marker, internal to pytest-django.

        This will dynamically request the ``db`` or ``transactional_db``
        fixtures as required by the django_db marker.
        """
        marker = request.keywords.get('django_db', None)
        if marker:
            validate_django_db(marker)
            if marker.transaction:
                getfixturevalue(request, 'transactional_db')
            else:
                getfixturevalue(request, 'db')

ve/lib/python2.7/site-packages/pytest_django/plugin.py:376:


self = <django.db.backends.sqlite3.base.SQLiteCursorWrapper object at 0x11976a478>
query = 'SELECT "django_migrations"."app", "django_migrations"."name" FROM "django_migrations"', params = ()

    def execute(self, query, params=None):
        if params is None:
            return Database.Cursor.execute(self, query)
        query = self.convert_query(query)
>       return Database.Cursor.execute(self, query, params)
E       OperationalError: no such table: django_migrations

ve/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py:485: OperationalError

我尝试在conftest.py 中使用ensure_schema 创建表。 我已经尝试了--nomigrations--create-dbpytest 的所有选项。

我猜这是我在使用旧系统时遇到的一个奇怪的配置问题,但我不确定从哪里开始寻找。有人有建议吗?

【问题讨论】:

您是否尝试过 makemigrations 并分别为每个应用程序迁移?这有时可能会解决您的问题 你在使用py.test /path/to/django/project --nomigrations --ds=myproject.settings.test之类的东西吗?你运行的命令是什么? 【参考方案1】:

看起来可能是迁移的问题。

运行./manage.py schemamigration research --auto 表明大多数字段没有指定任何默认值。

接下来,您运行./manage.py schemamigration research --init,然后运行./manage.py migrate research

创建表格后,这对我有用:

python manage.py migrate --run-syncdb

注意:不要忘记先运行 python makemigrations,即python manage.py makemigrations name of the app where patients model is

实用提示django 生成了一个名为 django_migrations 的表,用于跟踪迁移的内容 是 应用。如果您删除您的migrations,请重新生成它们并尝试 migrate 不从表中删除记录,那么django 将 认为它已经应用了它们。你永远不应该删除你的 迁移,因为它会导致 django 混淆。

如果您正在积极开发,您可以跳过迁移步骤如果您正在积极开发并想跳过整个migrations 系统可以,但是一旦开始使用migrations,就永远不要删除 他们。这是我在开发新项目时使用的:

dropdb mydb && createdb mydb && python manage.py migrate --run-syncdb && python manage.py loaddata initial

首先,它会删除数据库和所有数据。然后它创建一个空 一。 --run-syncdb 生成架构,loaddata 加载 来自fixtures file 的数据。

因此,如果您仍在开发中并且可以删除所有数据并移动 您关心的设备文件,然后您可以删除所有 迁移文件夹。然后,您可以在每次更改时运行上面的命令 型号。

【讨论】:

以上是关于PyTest-Django 在缺少 django_migration 表时失败的主要内容,如果未能解决你的问题,请参考以下文章

Django Apache集成缺少模块

Django:“缺少1个必需的位置参数:'lookup _name'”,当它没有丢失时?

在 pytest 中使用不同的数据库

在这种复杂情况下,如何解决 Django 缺少组合键的问题?

迁移数据失败

Django 应用程序中的 HTMLCalendar:缺少参数