The problem with your code is here:
for artists in artist_name:
id_num = 0
id_num += 1
Note how id_num gets reset on every iteration of the loop. That means that, for every entry in your list, id_num will always be 1 and triggers the ON CONFLICT clause of your query, leaving the first record untouched.
Instead, pull the counter outside of the loop:
id_num = 0
for artists in artist_name:
id_num += 1
In addition, you should note that using string interpolation (f-strings) here is not a safe way to build queries. This is open to SQL Injection, which is a serious issue. Even though you're not exposed to outside data sources here, it's best to use parameterization from the start:
artist_name = ['Madonna', 'Slayer', 'Disturbed', 'Michael Jackson', 'Katty Parry']
with conn.cursor() as cur:
id_num = 0
for artists in artist_name:
id_num += 1
cur.execute(
"""
INSERT INTO Artist (Id, Name)
VALUES (:id_num, :artists)
ON CONFLICT DO NOTHING
""",
{'id_num': id_num, 'artists': artists}
)