Tables¶
Creating Tables¶
Define tables with typed columns:
from sqbooster.backends import SQLiteBackend
from sqbooster.schema import Column
from sqbooster.types import Integer, Text, Float, Boolean, JSON, Blob
db = SQLiteBackend("app.db")
db.create_table("users", [
Column("id", Integer(), primary_key=True, autoincrement=True),
Column("name", Text(), nullable=False),
Column("age", Integer()),
Column("email", Text(), unique=True),
Column("balance", Float(), default=0.0),
Column("active", Boolean(), default=True),
Column("metadata", JSON()),
Column("avatar", Blob()),
])
Column Types¶
Type |
Python Type |
SQL Type |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
any Python object |
|
|
|
|
|
|
|
Column Constraints¶
Column("id", Integer(), primary_key=True, autoincrement=True)
Column("name", Text(), nullable=False)
Column("email", Text(), unique=True)
Column("status", Text(), default="active")
Column("score", Float(), nullable=True)
Inserting Data¶
Single row:
db.insert("users", {
"name": "Alice",
"age": 30,
"email": "alice@example.com",
})
Multiple rows at once:
db.insert_many("users", [
{"name": "Bob", "age": 25, "email": "bob@example.com"},
{"name": "Charlie", "age": 35, "email": "charlie@example.com"},
])
Auto-increment primary keys are generated automatically:
# id is auto-generated
db.insert("users", {"name": "Diana", "email": "diana@example.com"})
Updating Data¶
# Update all users older than 60
db.update("users", {"active": False}, age__gte=60)
# Update a specific user
db.update("users", {"age": 31}, name="Alice")
Deleting Data¶
# Delete by filter
db.delete("users", name="Bob")
# Delete all rows
db.delete("users")
Table Management¶
# List all tables
db.get_tables() # ['users', 'posts']
# Check if table exists
db.table_exists("users") # True
# Get schema for a table
schema = db.get_schema("users")
# Drop a table
db.drop_table("old_table")
# Drop only if exists
db.drop_table("old_table", if_exists=True)
Raw SQL (SQLite/PostgreSQL only)¶
# Execute raw SQL
results = db.execute(
"SELECT name, age FROM users WHERE age > ?",
params=[25],
fetch=True,
)