Bonjour,
j'ai un projet en Django consistant à utiliser certaines tables d'une base de données Sqlite externe.
Pour réaliser les models dont j'ai besoin, j'ai lancé la commande
python manage.py inspectdb
.
Pour des raisons d'ordre pratique, chaque model a été nommé différemment du nom de la table qu'il représente.
Par exemple, j'ai fait ceci :
1 2 3 4 5 6 7 8 9 10
| class Author(models.Model):
'''Author model class.'''
name: models.TextField = models.TextField(
blank=True, null=True, db_column='sort'
)
class Meta:
managed: bool = False
db_table: str = 'authors' |
Django ne gère la base de données qu'en lecture seule car, je le répète
, la base Sqlite est externe au projet Python/Django.
J'ai voulu faire le test suivant :
1 2 3 4 5 6
| class TestModels:
@pytest.mark.django_db
def test_author(self) -> None:
auth: Author = Author.objects.create(name='aaa')
auth.save()
assert auth.name == 'aaa' |
Le test ne passe pas au vert. Voici ce que Pytest me sort en retour :
1 2 3 4
| ---------------------------------------------------------------------- Captured stderr setup -----------------------------------------------------------------------
Creating test database for alias 'default' ('file:memorydb_default?mode=memory&cache=shared')...
===================================================================== short test summary info ======================================================================
FAILED xxx/tests/unit/test_models.py::TestModels::test_author - django.db.utils.OperationalError: no such table: authors |
La table authors existe pourtant. C'est vers elle que pointe mon model Author.
Est-ce parce que la base de données est en lecture seule que le test de création d'un enregistrement dans la table authors ne peut être mené ?
Ca me parait plus que plausible, sauf que le message d'erreur levé par l'exception django.db.utils.OperationalError parle de tout autre chose : no such table: authors
Quelqu'un a-t-il une idée ?
Partager