ОБНОВЛЕНИЕ Django версия 2.1.7
Я получил эту ошибку sqlite3.OperationalError: database is locked
, используя pytest
с django
.
Решение:
Если мы используем @pytest.mark.django_db
декоратор. Что он делает, это создает in-memory-db
для тестирования.
Имени: file:memorydb_default?mode=memory&cache=shared
Мы можем получить это имя с:
from django.db import connection
db_path = connection.settings_dict['NAME']
Чтобы получить доступ к этой базе данных, а также отредактировать ее, выполните:
Подключение к базе данных:
with sqlite3.connect(db_path, uri=True) as conn:
c = conn.cursor()
Используйте uri=True
для указания файла диска, который является базой данных SQLite, которую нужно открыть.
Во избежание ошибки активируйте транзакции в декораторе:
@pytest.mark.django_db(transaction=True)
Финальная функция:
from django.db import connection
@pytest.mark.django_db(transaction=True)
def test_mytest():
db_path = connection.settings_dict['NAME']
with sqlite3.connect(db_path, uri=True) as conn:
c = conn.cursor()
c.execute('my amazing query')
conn.commit()
assert ... == ....