Initial Commit
This commit is contained in:
111
create_load.py
Normal file
111
create_load.py
Normal file
@@ -0,0 +1,111 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user