Main Ecosystems
HomePython CorePandas ReferenceNumPy ScientificFastAPI & PydanticDjango Enterprise
More Ecosystems
Environment & SetupRequests & HTTPAsyncIO ConcurrencyObject-Oriented OOPPyTorch Deep LearningScikit-Learn MLFlask FrameworkWeb ScrapingDatabase & ORMDevOps & Docker

SQLite DatabaseError / OperationalError: no such table in Python

Verified FixPython 3.10+SQLite3 / Python NativeSilo: database

Quick Fix / Solution Rapide

Execute CREATE TABLE IF NOT EXISTS before querying or verify the relative path passed to sqlite3.connect().

Root Cause Analysis

This error occurs when Python executes an SQL query (SELECT, INSERT, UPDATE) against an SQLite database, but the specified table name does not exist in the database schema file.

1. Querying Before Schema Initialization

Attempting to query a freshly opened SQLite database file without first executing table creation DDL (CREATE TABLE ...) immediately raises sqlite3.OperationalError: no such table: table_name.

2. Relative File Path Creating Empty Accidental Databases

When calling sqlite3.connect('app.db'), if the current working directory changes (e.g. running from tests/ instead of project root), SQLite silently creates a brand-new, completely empty app.db file in that folder rather than raising a FileNotFoundError.

3. Typographical Errors in Table Names

Case sensitivity or spelling mismatches (e.g. users vs user, auth_user vs tbl_users) cause table lookup failures.

4. Uncommitted In-Memory Databases

Opening multiple connections to sqlite3.connect(':memory:') creates distinct isolated in-memory databases; tables created in connection 1 do not exist in connection 2.

Reproduction Code (MCVE)

Example: Bug Reproduction
import sqlite3

conn = sqlite3.connect(':memory:')
# Querying table before creation raises OperationalError
conn.execute('SELECT * FROM users;')

Solution 1: Execute CREATE TABLE IF NOT EXISTS on Database Setup

Ensure schema initialization statements execute before any application data queries.

Example: Recommended Solution
import sqlite3

conn = sqlite3.connect(':memory:')
# 1. Initialize table schema
conn.execute('''
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        username TEXT NOT NULL UNIQUE
    );
''')
# 2. Safe query execution
cursor = conn.execute('SELECT COUNT(*) FROM users;')
print(f'Users count: {cursor.fetchone()[0]}')

Solution 2: Use Absolute Path for SQLite Database File

Use pathlib.Path to anchor the SQLite database file location relative to the project root directory.

Example: Alternative Solution
import sqlite3
from pathlib import Path

DB_PATH = Path(__file__).parent / 'app_data.db' if '__file__' in globals() else Path('app_data.db')
print(f'Anchored database file path: {DB_PATH.resolve()}')

A common mistake in Django or Flask is forgetting to run python manage.py migrate or flask db upgrade on a fresh checkout. The ORM model definitions in Python do not create database tables until migrations execute. Edge cases occur with in-memory SQLite URIs: use sqlite3.connect('file:memdb1?mode=memory&cache=shared', uri=True) to share an in-memory database across threads. Contrast this error with OperationalError: no such column, which occurs when a table exists but a specific column is missing.