Python with SQLite – Complete Guide
SQLite is a lightweight, serverless, self-contained SQL database engine built into Python via the sqlite3 module. It is perfect for applications that require a simple database without the overhead of client-server interaction.
Why Use SQLite with Python?
- No server required (embedded)
- Comes pre-installed with Python
- Great for desktop, mobile, and testing
- Uses a single .db file for storage
Setting Up
Import SQLite Module
import sqlite3
Connect to a Database
conn = sqlite3.connect('my_database.db') # Creates file if not exists
cursor = conn.cursor()
Step 1: Create a Table
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT NOT NULL
)
''')
conn.commit()
Step 2: Insert Data
Single Insert
cursor.execute("INSERT INTO users (name, email) VALUES (?, ?)", ("Alice", "alice@example.com"))
conn.commit()
Multiple Inserts
users = [
("Bob", "bob@example.com"),
("Charlie", "charlie@example.com")
]
cursor.executemany("INSERT INTO users (name, email) VALUES (?, ?)", users)
conn.commit()
Step 3: Read/Retrieve Data
Fetch All Records
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
print(row)
Fetch One Record
cursor.execute("SELECT * FROM users WHERE name = ?", ("Alice",))
row = cursor.fetchone()
print(row)
Step 4: Update Records
cursor.execute("UPDATE users SET email = ? WHERE name = ?", ("alice@newmail.com", "Alice"))
conn.commit()
Step 5: Delete Records
cursor.execute("DELETE FROM users WHERE name = ?", ("Bob",))
conn.commit()
Step 6: Close the Connection
cursor.close()
conn.close()
Full Working Example
import sqlite3
# Connect
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
# Create table
cursor.execute('''CREATE TABLE IF NOT EXISTS products (
id INTEGER PRIMARY KEY,
name TEXT,
price REAL
)''')
# Insert
cursor.execute("INSERT INTO products (name, price) VALUES (?, ?)", ("Pen", 1.5))
cursor.execute("INSERT INTO products (name, price) VALUES (?, ?)", ("Notebook", 3.0))
# Read
cursor.execute("SELECT * FROM products")
print(cursor.fetchall())
# Update
cursor.execute("UPDATE products SET price = ? WHERE name = ?", (2.0, "Pen"))
# Delete
cursor.execute("DELETE FROM products WHERE name = ?", ("Notebook",))
conn.commit()
conn.close()
Bonus: Using with Statement (Auto Close)
with sqlite3.connect("data.db") as conn:
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
print(cursor.fetchall())
Benefits of SQLite in Python Projects
- Ideal for prototyping
- No configuration needed
- Great for mobile apps and local desktop tools
- Easy to migrate to PostgreSQL/MySQL later
Final Tips
- Always commit() after changes.
- Use ? placeholders to avoid SQL injection.
- For large apps, consider using an ORM like SQLAlchemy or Django ORM.