Files
DAO3/main.py

48 lines
1.5 KiB
Python
Raw Normal View History

2026-09-01 22:35:05 +01:00
import os
2026-09-01 22:45:55 +01:00
import pandas as pd
2026-09-01 22:35:05 +01:00
from dotenv import load_dotenv, find_dotenv
2026-09-01 22:45:55 +01:00
from sqlalchemy.engine import URL, create_engine
2026-09-01 22:51:06 +01:00
from sqlalchemy.engine.base import Engine
2026-09-01 22:45:55 +01:00
2026-09-01 22:51:06 +01:00
def get_engine() -> Engine:
"""Load env vars and return a SQLAlchemy engine connected to the database."""
load_dotenv(find_dotenv())
2026-09-01 22:45:55 +01:00
2026-09-01 22:51:06 +01:00
url = URL.create(
drivername="postgresql+psycopg2",
username=os.getenv("DATABASE_USERNAME"),
password=os.getenv("DATABASE_PASSWORD"),
host=os.getenv("DATABASE_IP"),
port=int(os.getenv("DATABASE_PORT", 5432)),
database=os.getenv("DATABASE_NAME"),
)
2026-09-01 22:45:55 +01:00
2026-09-01 22:51:06 +01:00
return create_engine(url)
2026-09-01 22:45:55 +01:00
2026-09-01 22:51:06 +01:00
def run_query(engine: Engine, query: str) -> pd.DataFrame:
return pd.read_sql_query(query, engine)
2026-08-31 23:16:53 +01:00
2026-09-01 22:51:06 +01:00
def fetch_titles_and_genres(engine: Engine) -> pd.DataFrame:
"""Query title/genres from audiobookshelf.ao3 and return as a DataFrame."""
query = """SELECT title, genres FROM audiobookshelf.ao3;"""
return run_query(engine, query)
2026-09-01 23:04:24 +01:00
def count_genre_occurrences(engine: Engine) -> pd.DataFrame:
"""Count how many times each genre appears across all titles in SQL before returning."""
query = """SELECT genre, COUNT(*)
FROM audiobookshelf.ao3, unnest(genres) AS genre
GROUP BY genre
ORDER BY COUNT(*) DESC;"""
return run_query(engine, query)
2026-09-01 23:01:33 +01:00
2026-09-01 22:51:06 +01:00
def main():
engine = get_engine()
2026-09-01 23:04:24 +01:00
#data = fetch_titles_and_genres(engine)
genre_counts = count_genre_occurrences(engine)
2026-09-01 23:01:33 +01:00
print(genre_counts)
# print(data.head())
2026-09-01 22:51:06 +01:00
if __name__ == "__main__":
main()