deepsite / booknap project /setup_database.py
aakash1777's picture
Upload 38 files
0a96199 verified
raw
history blame
3.78 kB
#!/usr/bin/env python3
"""
Database setup script for Booknap
Run this script to create the necessary database tables
"""
import os
from sqlalchemy import create_engine, text
from sqlalchemy.exc import SQLAlchemyError
def setup_database():
"""Set up the database schema"""
# Database configuration - update with your actual password
DATABASE_URL = os.environ.get(
"DATABASE_URL",
"postgresql://postgres:YOUR_ACTUAL_PASSWORD@db.ckrqyjfdifjbsuuofegd.supabase.co:5432/postgres"
)
print("Connecting to database...")
print(f"URL: {DATABASE_URL.replace('YOUR_ACTUAL_PASSWORD', '***')}")
try:
# Create engine
engine = create_engine(DATABASE_URL, pool_pre_ping=True)
# Test connection
with engine.connect() as conn:
print("βœ… Database connection successful!")
# Create users table
create_users_table = """
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
full_name VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
"""
# Create index
create_index = """
CREATE INDEX IF NOT EXISTS idx_users_email ON users(email);
"""
# Execute schema creation
print("Creating users table...")
conn.execute(text(create_users_table))
print("Creating email index...")
conn.execute(text(create_index))
# Commit changes
conn.commit()
print("βœ… Database schema created successfully!")
# Verify table exists
result = conn.execute(text("SELECT table_name FROM information_schema.tables WHERE table_name = 'users'"))
if result.fetchone():
print("βœ… Users table verified!")
# Show table structure
result = conn.execute(text("\\d users"))
print("\nTable structure:")
# Note: \d command won't work in Python, let's use a different approach
result = conn.execute(text("SELECT column_name, data_type, is_nullable FROM information_schema.columns WHERE table_name = 'users' ORDER BY ordinal_position"))
columns = result.fetchall()
for col in columns:
print(f" {col[0]}: {col[1]} ({'NULL' if col[2] == 'YES' else 'NOT NULL'})")
else:
print("❌ Users table not found!")
except SQLAlchemyError as e:
print(f"❌ Database error: {e}")
print("\nPlease check:")
print("1. Your database password is correct")
print("2. The database is accessible from your network")
print("3. Update the DATABASE_URL in this script or set the environment variable")
except Exception as e:
print(f"❌ Unexpected error: {e}")
if __name__ == "__main__":
print("πŸš€ Booknap Database Setup")
print("=" * 40)
# Check if DATABASE_URL is set
if not os.environ.get("DATABASE_URL"):
print("⚠️ DATABASE_URL environment variable not set")
print("Please set it with your actual database password:")
print("export DATABASE_URL='postgresql://postgres:YOUR_PASSWORD@db.ckrqyjfdifjbsuuofegd.supabase.co:5432/postgres'")
print()
setup_database()
print("\n" + "=" * 40)
print("Setup complete!")