112 lines
2.9 KiB
Python
112 lines
2.9 KiB
Python
|
|
import os
|
||
|
|
import random
|
||
|
|
|
||
|
|
import psycopg
|
||
|
|
from dotenv import load_dotenv
|
||
|
|
from faker import Faker
|
||
|
|
|
||
|
|
_ = load_dotenv()
|
||
|
|
|
||
|
|
USERNAME = os.getenv("USERNAME")
|
||
|
|
PASSWORD = os.getenv("PASSWORD")
|
||
|
|
|
||
|
|
CONNSTR = (
|
||
|
|
f"host=data.cs.jmu.edu port=5432 dbname=sec2 user={USERNAME} password={PASSWORD}"
|
||
|
|
)
|
||
|
|
|
||
|
|
fake = Faker()
|
||
|
|
|
||
|
|
|
||
|
|
def make_releases() -> list[tuple[int, str, str, float, int]]:
|
||
|
|
releases: list[tuple[int, str, str, float, int]] = []
|
||
|
|
|
||
|
|
for i in range(0, 20):
|
||
|
|
title = fake.bs()
|
||
|
|
format = "CD"
|
||
|
|
sample_rate = 44.1
|
||
|
|
release_year = int(fake.year())
|
||
|
|
|
||
|
|
releases.append((i, title, format, sample_rate, release_year))
|
||
|
|
|
||
|
|
return releases
|
||
|
|
|
||
|
|
|
||
|
|
def make_tracks() -> list[tuple[int, str, float, str, int]]:
|
||
|
|
tracks: list[tuple[int, str, float, str, int]] = []
|
||
|
|
|
||
|
|
for i in range(0, 20):
|
||
|
|
title = fake.bs()
|
||
|
|
duration_sec = random.uniform(0.0, 1200.0)
|
||
|
|
track_artist = fake.name()
|
||
|
|
release_id = random.randint(0, 19)
|
||
|
|
|
||
|
|
tracks.append((i, title, duration_sec, track_artist, release_id))
|
||
|
|
|
||
|
|
return make_tracks()
|
||
|
|
|
||
|
|
|
||
|
|
def create_tables(cur: psycopg.Cursor):
|
||
|
|
with psycopg.connect(CONNSTR) as conn:
|
||
|
|
with conn.cursor() as cur:
|
||
|
|
_ = cur.execute(
|
||
|
|
"""
|
||
|
|
CREATE TABLE IF NOT EXISTS Release (
|
||
|
|
id INTEGER PRIMARY KEY,
|
||
|
|
title TEXT NOT NULL,
|
||
|
|
format TEXT NOT NULL,
|
||
|
|
sample_rate_khz REAL,
|
||
|
|
release_year INTEGER NOT NULL
|
||
|
|
)
|
||
|
|
"""
|
||
|
|
)
|
||
|
|
|
||
|
|
_ = cur.execute(
|
||
|
|
"""
|
||
|
|
CREATE TABLE IF NOT EXISTS Track (
|
||
|
|
id INTEGER PRIMARY KEY,
|
||
|
|
title TEXT NOT NULL,
|
||
|
|
duration_sec REAL NOT NULL,
|
||
|
|
track_artist TEXT,
|
||
|
|
release_id INTEGER,
|
||
|
|
FOREIGN KEY (release_id) REFERENCES Release(id)
|
||
|
|
)
|
||
|
|
"""
|
||
|
|
)
|
||
|
|
|
||
|
|
conn.commit()
|
||
|
|
|
||
|
|
|
||
|
|
def insert_table1():
|
||
|
|
with psycopg.connect(CONNSTR) as conn:
|
||
|
|
with conn.cursor() as cur:
|
||
|
|
cur.executemany(
|
||
|
|
"""
|
||
|
|
INSERT INTO Release (id, title, format, sample_rate_khz, release_year)
|
||
|
|
VALUES (%s, %s, %s, %s, %s)
|
||
|
|
""",
|
||
|
|
make_releases(),
|
||
|
|
)
|
||
|
|
|
||
|
|
conn.commit()
|
||
|
|
|
||
|
|
|
||
|
|
def insert_table2():
|
||
|
|
with psycopg.connect(CONNSTR) as conn:
|
||
|
|
with conn.cursor() as cur:
|
||
|
|
cur.executemany(
|
||
|
|
"""
|
||
|
|
INSERT INTO Track (id, title, duration_sec, track_artist, release_id)
|
||
|
|
VALUES (%s, %s, %s, %s, %s)
|
||
|
|
""",
|
||
|
|
make_tracks(),
|
||
|
|
)
|
||
|
|
|
||
|
|
conn.commit()
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
# Connect to postgres and create a cursor
|
||
|
|
with psycopg.connect(CONNSTR) as conn:
|
||
|
|
with conn.cursor() as cur:
|
||
|
|
create_tables(cur)
|