| import psycopg2 |
| from app import settings as config |
| from app.db import Base |
| from app.user.models import User |
| from psycopg2.errors import DuplicateDatabase |
| from sqlalchemy import create_engine |
| from sqlalchemy.orm import sessionmaker |
|
|
| |
| DATABASE_USERNAME = config.DATABASE_USERNAME |
| DATABASE_PASSWORD = config.DATABASE_PASSWORD |
| DATABASE_HOST = config.DATABASE_HOST |
| DATABASE_NAME = config.DATABASE_NAME |
|
|
| |
| initial_connection_url = ( |
| f"postgresql://{DATABASE_USERNAME}:{DATABASE_PASSWORD}@{DATABASE_HOST}/postgres" |
| ) |
|
|
| print(initial_connection_url) |
|
|
| conn = None |
|
|
| |
| try: |
| conn = psycopg2.connect(initial_connection_url) |
| conn.autocommit = True |
| cursor = conn.cursor() |
|
|
| |
| cursor.execute(f"CREATE DATABASE {DATABASE_NAME}") |
| print(f"Database '{DATABASE_NAME}' created successfully") |
|
|
| except DuplicateDatabase as e: |
| if "already exists" in str(e): |
| print(f"Database '{DATABASE_NAME}' already exists.") |
| else: |
| print(f"Error creating database: {e}") |
| finally: |
| if conn: |
| cursor.close() |
| conn.close() |
|
|
| |
| SQLALCHEMY_DATABASE_URL = f"postgresql://{DATABASE_USERNAME}:{DATABASE_PASSWORD}@{DATABASE_HOST}/{DATABASE_NAME}" |
| print(SQLALCHEMY_DATABASE_URL) |
|
|
| |
| engine = create_engine(SQLALCHEMY_DATABASE_URL) |
|
|
| |
| Base.metadata.drop_all(engine) |
| print("Tables dropped") |
|
|
| |
| Base.metadata.create_all(engine) |
| print("Tables created") |
|
|
| |
| print("Populating database with default user") |
| Session = sessionmaker(bind=engine) |
| session = Session() |
|
|
| user = User( |
| name="Admin User", |
| password="admin", |
| email="admin@example.com", |
| ) |
|
|
| session.add(user) |
| session.commit() |
| print("Default user added") |
|
|