Files
TimeTracker/docker/test_db_connection.py
Dries Peeters d9dab3a49c feat: enhance README with comprehensive screenshot showcase
- Add organized screenshot sections for better visual presentation
- Include all 12 available screenshots from assets/screenshots/
- Group screenshots into logical categories:
  * Core Application Views (Dashboard, Projects, Tasks, Clients)
  * Management & Analytics (Reports, Visual Analytics, Task Management, Admin)
  * Data Entry & Creation (Log Time, New Task, New Client, New Project)
- Improve visual layout with proper spacing and responsive design
- Enhance user experience by showcasing full application capabilities
2025-09-02 14:42:54 +02:00

137 lines
4.2 KiB
Python

#!/usr/bin/env python3
"""
Simple Database Connection Test Script
This script tests database connectivity to help debug connection issues
"""
import os
import sys
import psycopg2
import sqlite3
from datetime import datetime
def test_postgresql_connection(db_url):
"""Test PostgreSQL connection"""
print(f"Testing PostgreSQL connection: {db_url}")
try:
# Handle both postgresql:// and postgresql+psycopg2:// URLs
clean_url = db_url.replace('+psycopg2://', '://')
print(f"Cleaned URL: {clean_url}")
# Test connection
conn = psycopg2.connect(clean_url)
cursor = conn.cursor()
# Test basic query
cursor.execute("SELECT version()")
version = cursor.fetchone()[0]
print(f"✓ PostgreSQL connection successful")
print(f" Server version: {version}")
# Test if we can access information_schema
cursor.execute("SELECT current_database(), current_user")
db_info = cursor.fetchone()
print(f" Database: {db_info[0]}")
print(f" User: {db_info[1]}")
# Check if we can list tables
cursor.execute("""
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public'
ORDER BY table_name
""")
tables = [row[0] for row in cursor.fetchall()]
print(f" Tables found: {len(tables)}")
if tables:
print(f" Table names: {tables[:5]}{'...' if len(tables) > 5 else ''}")
conn.close()
return True
except Exception as e:
print(f"✗ PostgreSQL connection failed: {e}")
return False
def test_sqlite_connection(db_url):
"""Test SQLite connection"""
print(f"Testing SQLite connection: {db_url}")
try:
db_file = db_url.replace('sqlite:///', '')
print(f"Database file: {db_file}")
if not os.path.exists(db_file):
print(f" Database file does not exist, checking if directory is writable...")
dir_path = os.path.dirname(db_file) if os.path.dirname(db_file) else '.'
if os.access(dir_path, os.W_OK):
print(f" ✓ Directory is writable: {dir_path}")
return True
else:
print(f" ✗ Directory is not writable: {dir_path}")
return False
# Test connection
conn = sqlite3.connect(db_file)
cursor = conn.cursor()
# Test basic query
cursor.execute("SELECT sqlite_version()")
version = cursor.fetchone()[0]
print(f"✓ SQLite connection successful")
print(f" SQLite version: {version}")
# Check if we can list tables
cursor.execute("SELECT name FROM sqlite_master WHERE type='table'")
tables = [row[0] for row in cursor.fetchall()]
print(f" Tables found: {len(tables)}")
if tables:
print(f" Table names: {tables[:5]}{'...' if len(tables) > 5 else ''}")
conn.close()
return True
except Exception as e:
print(f"✗ SQLite connection failed: {e}")
return False
def main():
"""Main function"""
print("=== Database Connection Test ===")
print(f"Timestamp: {datetime.now()}")
print()
# Get database URL from environment
db_url = os.getenv('DATABASE_URL')
if not db_url:
print("✗ DATABASE_URL environment variable not set")
print("Please set DATABASE_URL to test database connection")
sys.exit(1)
print(f"Database URL: {db_url}")
print()
# Test connection based on database type
success = False
if db_url.startswith('postgresql'):
success = test_postgresql_connection(db_url)
elif db_url.startswith('sqlite'):
success = test_sqlite_connection(db_url)
else:
print(f"✗ Unknown database type: {db_url}")
print("Supported types: postgresql://, sqlite://")
sys.exit(1)
print()
if success:
print("🎉 Database connection test successful!")
sys.exit(0)
else:
print("❌ Database connection test failed!")
sys.exit(1)
if __name__ == "__main__":
main()