Compare commits
3 Commits
14c16ce0c8
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fdc4725ca3 | ||
|
|
d2ff44e5d5 | ||
|
|
1f62a5e008 |
56
main.py
56
main.py
@@ -2,27 +2,47 @@ import os
|
||||
import pandas as pd
|
||||
from dotenv import load_dotenv, find_dotenv
|
||||
from sqlalchemy.engine import URL, create_engine
|
||||
from sqlalchemy.engine.base import Engine
|
||||
|
||||
load_dotenv(find_dotenv())
|
||||
|
||||
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")),
|
||||
database=os.getenv("DATABASE_NAME"),
|
||||
)
|
||||
def get_engine() -> Engine:
|
||||
"""Load env vars and return a SQLAlchemy engine connected to the database."""
|
||||
load_dotenv(find_dotenv())
|
||||
|
||||
engine = create_engine(url)
|
||||
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"),
|
||||
)
|
||||
|
||||
query = """SELECT title, genres FROM audiobookshelf.ao3;"""
|
||||
return create_engine(url)
|
||||
|
||||
data = pd.read_sql_query(query, engine)
|
||||
print(data.head())
|
||||
def run_query(engine: Engine, query: str) -> pd.DataFrame:
|
||||
return pd.read_sql_query(query, engine)
|
||||
|
||||
# cursor.execute(Query)
|
||||
# row = cursor.fetchone()
|
||||
# while row is not None:
|
||||
# print(row)
|
||||
# row = cursor.fetchone()
|
||||
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)
|
||||
|
||||
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)
|
||||
|
||||
def main():
|
||||
engine = get_engine()
|
||||
#data = fetch_titles_and_genres(engine)
|
||||
genre_counts = count_genre_occurrences(engine)
|
||||
print(genre_counts)
|
||||
# print(data.head())
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user