2017-01-20 57 views
15

Próbuję dodać pytest-django do mojego obecnego środowiska pytest3/Django1.7.PyTest-Django W przypadku braku tabeli django_migration

Obecnie nie byliśmy za pomocą wtyczki i zostały cierpiących na wspólnej stanie między niektórymi testami

wszystko wydaje się wizualnie dobrze wyglądać i testy wydają się przejść do końca kiedy się następujące komunikaty o błędach:

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 

Próbowałem utworzyć tabelę z ensure_schema w conftest.py. Próbowałem każdej opcji --nomigrations i --create-db do pytest.

Zgaduję, że to dziwny problem z konfiguracją, którą mam w starym systemie, ale nie jestem pewien, od czego zacząć. Czy ktoś ma sugestie?

+0

Czy próbowałeś makemigracji i migracji dla każdej aplikacji osobno? to może rozwiązać twoje problemy w czasach –

+0

Czy używasz czegoś takiego jak 'py.test/path/to/django/project --nomigrations --ds = myproject.settings.test'? Jaką komendę używasz? – FlipperPA

Odpowiedz

4

Wygląda na to, że problem dotyczy migracji.

Uruchomienie ./manage.py schemamigration research --auto pokazuje, że większość pól nie ma określonych wartości domyślnych.

Następnie należy następnie uruchomić ./manage.py schemamigration research --init następnie ./manage.py migrate research

ten pracował dla mnie po utworzeniu tabeli:

python manage.py migrate --run-syncdb 

UWAGA: Nie zapomnij uruchomić makemigrations Pythona pierwszy, tj python manage.py makemigrations {name of the app where patients model is}

Pomocne wskazówki: Jest tabl e generowane przez django o nazwie django_migrations, które śledzi, które migracje zostały zastosowane. Jeśli usuniesz swoje migrations, ponownie wygeneruj je i spróbuj migrate bez usuwania rekordów z tabeli, a następnie django będzie sądzić, że już je zastosował. Nigdy nie należy usuwać migracji , ponieważ spowoduje to dezorientację.

można pominąć migracje krok jeśli aktywnie rozwija Jeśli aktywnie rozwija i chcesz pominąć cały system migrations można, ale po uruchomieniu za pomocą migrations, nigdy usuwać im. Oto co mogę użyć przy opracowywaniu nowego projektu:

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

pierwsze, spada bazy danych i wszystkie dane. Następnie tworzy pusty . Model --run-syncdb generuje schemat i dane ładują dane z .

Tak więc, jeśli wciąż się rozwijasz i możesz usunąć wszystkie swoje dane i przenieść , co ci zależy na pliku urządzeń, to możesz usunąć wszystkie foldery migracji . Następnie możesz uruchomić powyższe polecenie za każdym razem, gdy zmieniasz model .