PyTest-Django没有丢失django_migration表

Che*_*het 14 python testing django database-migration pytest

我正在尝试将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
Run Code Online (Sandbox Code Playgroud)

我试图创建表ensure_schemaconftest.py.我试过的每个选项--nomigrations--create-dbpytest.

我猜这是遗留系统的一个奇怪的配置问题,但我不知道从哪里开始寻找.有人有建议吗?

bob*_*rti 4

看起来可能是迁移问题。

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

接下来,你./manage.py schemamigration research --init接着运行./manage.py migrate research

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

python manage.py migrate --run-syncdb
Run Code Online (Sandbox Code Playgroud)

注意:不要忘记先运行 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 Code Online (Sandbox Code Playgroud)

首先,它删除数据库和所有数据。然后它创建一个空的。生成--run-syncdb模式并loaddata固定文件加载数据。

因此,如果您仍在开发并且可以删除所有数据并将您关心的内容移动到固定文件中,那么您可以删除所有迁移文件夹。然后,您可以在每次更改模型时运行上面的命令。