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-db
到pytest
的所有选项。
我猜这是我在使用旧系统时遇到的一个奇怪的配置问题,但我不确定从哪里开始寻找。有人有建议吗?
【问题讨论】:
您是否尝试过 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:“缺少1个必需的位置参数:'lookup _name'”,当它没有丢失时?