Pytest Fixture With Isolated Database
Provide a pytest fixture that creates a fresh database per test and tears it down, so tests stay independent and order does not matter.
Code
import sqlite3
from typing import Iterator
import pytest
@pytest.fixture
def db() -> Iterator[sqlite3.Connection]:
connection = sqlite3.connect(":memory:")
connection.execute(
"CREATE TABLE items (id INTEGER PRIMARY KEY, name TEXT NOT NULL)"
)
try:
yield connection
finally:
connection.close()
def test_insert_item(db: sqlite3.Connection) -> None:
db.execute("INSERT INTO items (name) VALUES (?)", ("widget",))
count = db.execute("SELECT COUNT(*) FROM items").fetchone()[0]
assert count == 1Report a problem with this exampleOpens a pre-filled issue on GitHub.