2017-01-20 25 views
15

Tôi đang cố thêm pytest-django vào môi trường pytest3/Django1.7 hiện tại của mình.PyTest-Django Không có bảng django_migration bị thiếu

Hiện nay chúng tôi đã không sử dụng các plugin và đã bị từ trạng thái chia sẻ giữa một số xét nghiệm

Mọi thứ dường như nhìn trực quan tốt và các bài kiểm tra dường như vượt qua cho đến cuối cùng khi tôi nhận được thông báo lỗi sau:

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 

Tôi đã cố gắng tạo bảng với ensure_schema trong conftest.py. Tôi đã thử mọi tùy chọn --nomigrations--create-db đến pytest.

Tôi đoán đó là sự cố cấu hình lạ mà tôi có với hệ thống cũ, nhưng tôi không chắc chắn nên bắt đầu tìm ở đâu. Bất cứ ai có đề xuất?

+0

bạn đã thử tạo quảng cáo và di chuyển cho từng ứng dụng riêng biệt chưa? điều này có thể giải quyết vấn đề của bạn tại thời điểm –

+0

Bạn đang sử dụng một cái gì đó như 'py.test/path/to/django/project --nomigrations --ds = myproject.settings.test'? Lệnh bạn đang chạy là gì? – FlipperPA

Trả lời

4

Dường như có thể là sự cố khi di chuyển.

Chạy ./manage.py schemamigration research --auto cho thấy hầu hết các trường không có bất kỳ giá trị mặc định nào được chỉ định.

Tiếp theo, bạn sau đó chạy ./manage.py schemamigration research --init Tiếp theo ./manage.py migrate research

này làm việc cho tôi sau khi tôi tạo ra bảng:

python manage.py migrate --run-syncdb 

Chú ý: Đừng quên để chạy makemigrations trăn đầu tiên, tức là python manage.py makemigrations {name of the app where patients model is}

Lời khuyên hữu ích: Có một tabl e được tạo bởi django được gọi là django_migrations theo dõi những gì di chuyển có được áp dụng . Nếu bạn xóa migrations, hãy tạo lại chúng và thử migrate mà không xóa bản ghi khỏi bảng, sau đó django sẽ nghĩ rằng nó đã áp dụng chúng. Bạn không bao giờ nên xóa di chuyển của mình vì nó sẽ khiến django bị nhầm lẫn.

Bạn có thể bỏ qua bước di cư nếu bạn đang tích cực phát triển Nếu bạn đang tích cực phát triển và muốn bỏ qua toàn bộ hệ thống migrations bạn có thể, nhưng một khi bạn bắt đầu sử dụng migrations, không bao giờ xóa họ. Dưới đây là những gì tôi sử dụng khi phát triển một dự án mới:

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

Thứ nhất, nó sẽ rơi xuống cơ sở dữ liệu và tất cả các dữ liệu. Sau đó, nó tạo ra một trống. --run-syncdb tạo giản đồ và loaddata tải dữ liệu từ fixtures file. Vì vậy, nếu bạn vẫn đang phát triển và có thể xóa tất cả dữ liệu của mình và di chuyển những gì bạn quan tâm đến tệp đồ đạc, thì bạn có thể xóa tất cả các thư mục di chuyển của mình. Sau đó, bạn có thể chạy lệnh ở trên mỗi lần bạn thay đổi mô hình của mình.