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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?