UPDATE django Version 2.1.7
Ich habe diesen Fehler sqlite3.OperationalError: database is lockedmit pytestmit django.
Lösung:
Wenn wir @pytest.mark.django_dbDekorateur verwenden. Es wird ein in-memory-dbTest erstellt.
Benannt: file:memorydb_default?mode=memory&cache=sharedWir können diesen Namen bekommen mit:
from django.db import connection
db_path = connection.settings_dict['NAME']
Gehen Sie wie folgt vor, um auf diese Datenbank zuzugreifen und sie auch zu bearbeiten:
Stellen Sie eine Verbindung zur Datenbank her:
with sqlite3.connect(db_path, uri=True) as conn:
c = conn.cursor()
Verwenden Sie uri=Truediese Option, um die Datenträgerdatei anzugeben, die die zu öffnende SQLite-Datenbank ist.
Um den Fehler zu vermeiden, aktivieren Sie Transaktionen im Dekorator:
@pytest.mark.django_db(transaction=True)
Letzte Funktion:
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 ... == ....
create_engine('sqlite:///{}'.format(xxx), connect_args={'timeout': 15})