A website inspired by Last.fm that will keep track of your listening statistics
lastfm music statistics
at main 57 lines 1.4 kB view raw
1import duckdb 2import os 3 4STATS_DATABASE_PATH = os.getenv("STATS_DATABASE_PATH") or "private/database/statistics.dev.duckdb" 5 6def create_recording_mbid__artist_mbid(conn: duckdb.DuckDBPyConnection): 7 query = """ 8 CREATE TABLE recording_mbid__artist_mbid ( 9 recording_mbid TEXT NOT NULL, 10 artist_mbid TEXT NOT NULL, 11 PRIMARY KEY (recording_mbid, artist_mbid) 12 ); 13 """ 14 15 conn.execute(query) 16 17 18def create_recording_mbid__release_group_mbid(conn: duckdb.DuckDBPyConnection): 19 query = """ 20 CREATE TABLE recording_mbid__release_group_mbid ( 21 recording_mbid TEXT NOT NULL, 22 release_group_mbid TEXT NOT NULL, 23 PRIMARY KEY (recording_mbid, release_group_mbid) 24 ); 25 """ 26 27 conn.execute(query) 28 29 30def scrobble(conn: duckdb.DuckDBPyConnection): 31 query = """ 32 CREATE TABLE scrobble ( 33 user_id INTEGER NOT NULL, 34 recording_mbid TEXT NOT NULL, 35 played_at TIMESTAMP NOT NULL 36 ); 37 38 CREATE INDEX scrobble_user_id_idx ON scrobble(user_id); 39 CREATE INDEX scrobble_recording_mbid_idx ON scrobble(recording_mbid); 40 CREATE INDEX scrobble_played_at_idx ON scrobble(played_at); 41 """ 42 43 conn.execute(query) 44 45 46def main(): 47 conn = duckdb.connect(STATS_DATABASE_PATH) 48 49 create_recording_mbid__artist_mbid(conn) 50 create_recording_mbid__release_group_mbid(conn) 51 scrobble(conn) 52 53 conn.close() 54 55 56if __name__ == "__main__": 57 main()